Skip to main content
Glama

PredixLab

Server Details

Daily US stock signals, screeners and options analysis over MCP (Streamable HTTP). Read-only. Bearer API key. Not investment advice.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

B3.4/5.0

Scored across 18 tools

Disambiguation3/5

Most tools target clearly distinct resources (quotes, gamma, technicals, screener, presets), but two pairs genuinely overlap. get_option_activity ('browse unusual-options activity with ticker-level pagination') and get_unusual_options ('unusual option activity grouped by symbol') are hard to tell apart, and get_signals vs. get_pivot_signals/get_alpharank_signals requires reading descriptions to understand the composite relationship.

Naming Consistency5/5

Every tool follows a strict snake_case verb_noun pattern using a small set of verbs (get_, list_, run_). Names are predictable and domain terms (alpharank, pivot, options, screener) are used consistently across related tools.

Tool Count4/5

At 18 tools the surface is on the heavier side, but the server spans several distinct data products (market data, AlphaRank, Pivot, options flow, screener), each of which justifies its own read tools. Nothing is clearly redundant except the get_option_activity/get_unusual_options pair.

Completeness4/5

Coverage is broad: quotes, market snapshot/overview/movers, technicals, options structure and gamma, multiple signal families with date discovery, and screener execution with presets. Minor gaps exist around symbol lookup/validation, saved screeners, and any fundamentals or news layer, but core workflows are reachable.

Available Tools

18 tools
get_alpharank_historyB
Read-onlyIdempotent
Inspect

Get visible AlphaRank publications for a ticker, oldest first.

NameRequiredDescriptionDefault
limitNo
marketNous
symbolYes

Output Schema

NameRequiredDescription
countNo
itemsNo
marketYes
symbolYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds useful ordering ('oldest first') and visibility scoping, but it does not explain what 'visible' means, how pagination works, or how limit/market affect results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single front-loaded sentence with no wasted words. It is terse, but structurally efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The output schema and annotations reduce the need to explain return values and safety. However, with 0% schema description coverage, the description is incomplete for invocation because it omits limit, market, and the meaning of 'visible' publications.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

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 only references 'ticker' for the symbol parameter and says nothing about limit or market, leaving two of three parameters without added meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: retrieves visible AlphaRank publications for a ticker, ordered oldest first. It is distinguishable from get_alpharank_signals, though it does not explicitly contrast itself with that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives no explicit when-to-use guidance, prerequisites, or alternatives. The phrase 'visible AlphaRank publications' implies a history lookup, but the agent is not told when to choose this over get_alpharank_signals or other sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_alpharank_signalsA
Read-onlyIdempotent
Inspect

Get AlphaRank top-15 for a session; omit date for the latest visible session.

NameRequiredDescriptionDefault
dateNo
marketNous

Output Schema

NameRequiredDescription
dateYes
itemsNo
marketYes
horizonNo
total_countNo

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds the meaningful extra facts that the response is capped at the top 15 and that date omission resolves to the latest visible session.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the core behavior front-loaded and the default-behavior rule attached — no filler to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, and the date default is covered. However, for a 0%-coverage tool the undocumented market parameter and the lack of any routing to get_alpharank_history leave meaningful gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must carry parameter meaning; it does explain the null/omitted date behavior, but says nothing about the market parameter (default "us", max length 20) or what values it accepts, leaving half the surface undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ("Get AlphaRank top-15 for a session") and reveals the result shape (top-15). It does not explicitly differentiate itself from the sibling get_alpharank_history, leaving the boundary to be inferred from the name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause "omit date for the latest visible session" gives a concrete usage rule for the date parameter, but there is no guidance on when to call this versus get_alpharank_history or other signal siblings, and no mention of the market scope.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_gamma_exposureB
Read-onlyIdempotent
Inspect

Get gamma exposure for a symbol; omit date for the latest visible analysis.

NameRequiredDescriptionDefault
dateNo
symbolYes

Output Schema

NameRequiredDescription
dateYes
modelYes
scopesNo
symbolYes
spot_moveYes
generated_atYes
previous_dateNo
contract_countYes
underlying_priceYes
oi_gamma_coverageYes
previous_underlying_priceNo
valid_gamma_contract_countYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already cover read-only, idempotent, non-destructive, and closed-world behavior, so the bar is low. The description adds the useful nuance that results are scoped to what is "visible" (suggesting entitlement or data-availability limits) and that omitting date yields the latest analysis. It says nothing about units, aggregation level, or freshness, but the output schema covers return shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the action front-loaded and the optional-param rule appended. Nothing is wasted, though the extreme brevity leaves the concept of gamma exposure unqualified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read tool with annotations and an output schema, most of the burden is already carried elsewhere. Still, the description doesn't clarify what "gamma exposure" aggregates (total vs. per strike/expiry) or what "visible" entails, which an agent would want before trusting the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load; it partially does by explaining the date default semantics (omit for latest). The symbol parameter's format constraints (pattern, length) live only in the schema, and the description adds no meaning about accepted symbol forms or whether date returns a historical snapshot.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource combo ("Get gamma exposure") scoped to a symbol, which is unambiguous on its own. It doesn't distinguish from siblings like get_options_structure or get_unusual_options, so an agent scanning the list can't tell exactly which options-exposure tool fits which need.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives one concrete usage rule: omit date to get the latest visible analysis. That's helpful for the optional param but there is no guidance on when to prefer this over other options-analytics siblings, and no prerequisites 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_market_moversB
Read-onlyIdempotent
Inspect

Get daily gainers, losers, activity, unusual volume, gaps or 52-week extremes.

NameRequiredDescriptionDefault
limitNo
categoryNogainers

Output Schema

NameRequiredDescription
dateNo
entriesNo
categoryYes
total_countNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the meaningful temporal scope word 'daily', but says nothing about the hard cap of 10 results, ranking order, or whether the ranking is intraday vs. end-of-day.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that enumerates the resource scope with zero filler. Nothing to trim and nothing buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation is not required. However, for a tool spanning eight ranking categories, the description gives no sense of what distinguishes them or of result-count behavior beyond the schema's maximum, leaving meaningful inference work to the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The listed mover types map cleanly onto the category enum, but the naming is not literal (description's 'activity' is the enum's 'most_active', 'gaps' covers both gap_up and gap_down), so it adds modest clarification. The limit parameter — bounded 1-10 with a default of 10 — is documented only by schema constraints and gets no semantic treatment in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('daily gainers, losers, activity, unusual volume, gaps or 52-week extremes'), which concretely enumerates what the tool returns. It is distinguishable from get_quotes or get_market_snapshot by focusing on ranked movers rather than raw prices, though it never names those siblings explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit when-to-use guidance and no routing to alternatives such as get_market_overview, get_market_snapshot, or run_screener. Usage is only implied by the list of mover types; an agent must infer from the category list when this beats a screener or snapshot call.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_overviewB
Read-onlyIdempotent
Inspect

Get breadth, sentiment and leading movers in one daily overview.

NameRequiredDescriptionDefault
movers_limitNo

Output Schema

NameRequiredDescription
dateNo
breadthYes
sentimentYes
top_losersNo
most_activeNo
top_gainersNo
generated_atNo

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false, and destructiveHint=false, so the safety profile is covered. The description adds that the tool combines breadth, sentiment, and leading movers into a daily overview, but does not add rate limits, freshness details, or other behavioral context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is a single front-loaded sentence with no filler. Every phrase contributes to describing scope and contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the annotations cover the safety profile. The description is complete enough to explain the tool's broad purpose, though it could better clarify how it differs from get_market_snapshot and what the optional movers_limit controls.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only mentions 'leading movers' without explaining the movers_limit parameter, its default, or its maximum. The parameter name is intuitive and schema constraints exist, but the description does not compensate for the missing semantic description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb (Get) and resource (market overview), and lists the contents: breadth, sentiment, and leading movers. It is clear what the tool returns, but it does not explicitly distinguish itself from close siblings such as get_market_snapshot or get_market_movers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'in one daily overview' implies a daily-use, high-level aggregation tool, but it gives no explicit when-to-use guidance or exclusions relative to alternatives. An agent can infer this is for a broad market glance rather than targeted data, but must guess versus get_market_snapshot.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_market_snapshotA
Read-onlyIdempotent
Inspect

Get the complete latest daily market snapshot, not a live tick feed.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely new context: the data is an end-of-day/latest daily snapshot with no streaming tick semantics, which materially affects how an agent should treat freshness. It stops short of stating update cadence or staleness window.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero waste. The scope qualifier arrives immediately rather than being buried after setup.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value enumeration is not required, and with no parameters the call surface is trivial. The one residual gap is that the snapshot's coverage (which markets/instruments) and refresh timing are unstated, though the "daily vs live" distinction covers the most important behavioral question.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly signals no filtering inputs are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Get the complete latest daily market snapshot") with the important qualifier that it is a daily snapshot rather than a live feed. It does not name a sibling outright, but the negative framing implicitly separates it from get_quotes. Clear enough for an agent to identify the resource, slightly short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause "not a live tick feed" implies the alternative (get_quotes / real-time quote tools) and the condition for choosing this one, but the routing is left to inference. No explicit "use this when..." statement and no exclusions named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_option_activityC
Read-onlyIdempotent
Inspect

Browse visible unusual-options activity with ticker-level pagination.

NameRequiredDescriptionDefault
limitNo
offsetNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description's only added behavioral fact is that results are 'visible' (permission-scoped) and paginated at ticker level, which is genuinely useful. It says nothing about ordering, staleness, or result caps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler or repetition. It is appropriately terse for its length, though the brevity borders on under-specification rather than elegance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. However, for a paginated browse tool with an undocumented parameter set and a near-identical sibling, the description omits paging semantics, the 20-item cap, and how it differs from get_unusual_options. Those gaps leave an agent unable to call it correctly in ambiguous cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the two parameters (limit with max 20, offset) carry no documented meaning from either source. The phrase 'ticker-level pagination' hints that pagination aggregates rows per ticker, but neither limit nor offset is explained and the hard cap of 20 is never surfaced in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The verb 'browse' and resource 'unusual-options activity' are stated, so the general purpose is legible. But it does not distinguish itself from the close sibling get_unusual_options, nor does 'visible' clarify whose visibility is meant. An agent cannot confidently route between the two options tools on this sentence alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus get_unusual_options, run_screener, or list_option_activity_dates. No prerequisites or context (e.g., date bounds supplied by a sibling listing tool) are mentioned. The agent must infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_options_structureC
Read-onlyIdempotent
Inspect

Get the latest visible implied-volatility and positioning structure for a symbol.

NameRequiredDescriptionDefault
symbolYes

Output Schema

NameRequiredDescription
dateYes
symbolYes
summaryYes
generated_atYes
previous_dateNo
term_structureNo
skew_expirationsNo
underlying_priceYes
position_migrationsNo
previous_underlying_priceNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is covered. The description adds only the qualifiers "latest" and "visible," hinting at freshness/entitlement filtering but never explaining what "visible" means (delayed data? subscription gating?). No mention of scope, limits, or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no boilerplate or waste. It is efficient, though its terseness comes at the cost of the clarity gaps noted above rather than being tight and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. However, given a jargon-heavy purpose and zero schema parameter documentation, the description leaves an agent unsure what distinguishes this from other options-analytics siblings or what "visible" constrains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% for the single required `symbol` parameter, so the description must compensate and only weakly does: "for a symbol" implies an underlying ticker but says nothing about accepted formats (the pattern permits index-style symbols like ^SPX) or whether option expiries are implied by the call.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a verb ("Get") and a resource ("implied-volatility and positioning structure"), which is more specific than a tautology. But "positioning structure" and "structure" are unexplained jargon, so an agent cannot tell precisely what data comes back or how this differs from siblings like get_gamma_exposure or get_option_activity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no alternatives are named, despite many adjacent siblings that also deal with options activity/exposure. The agent must guess whether this is a screening tool, a snapshot tool, or an analytics tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pivot_signalsB
Read-onlyIdempotent
Inspect

Get Pivot signals by session, direction and event; omit date for latest visible.

Items contain only date, symbol, event, kind, direction and horizon (trading days), grouped into longs and shorts.

NameRequiredDescriptionDefault
dateNo
eventNo
limitNo
marketNous
directionNo

Output Schema

NameRequiredDescription
dateNo
longsNo
countsNoEvents by type for this session
marketYes
shortsNo
horizonNo
total_countNo

TDQS

B3.4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the bar is lower; the description still adds the useful default behavior when date is omitted (latest visible) and describes what the returned items contain and how they are grouped.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core behavior and kept to three tight lines, with the default-date rule placed early. Slight waste in the parenthetical about trading days, but nothing significant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema and annotations carry the safety and return-shape burden, but with five optional parameters and zero schema coverage, an agent still lacks guidance on 'market' and 'limit' (including the 200 cap) to call this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description documents only three of the five parameters (date behavior, direction, event), leaving 'market' and 'limit' entirely unexplained; it also adds no format or range details. The word 'session' does not map cleanly to any declared parameter, which is mildly confusing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Get Pivot signals') and the axes it is keyed by (session/direction/event). It is distinguishable from get_signals and get_alpharank_signals by the 'Pivot' qualifier, though the description never explicitly contrasts them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'omit date for latest visible' is a concrete usage rule, but there is no guidance on when to prefer this over sibling tools like get_signals or get_alpharank_signals, and no exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_quotesA
Read-onlyIdempotent
Inspect

Get latest session quotes for 1-50 symbols, not real-time streaming prices.

NameRequiredDescriptionDefault
symbolsYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuine value beyond them by disclosing data freshness — quotes are end-of-session, not live streaming — which prevents an agent from mistaking this for a real-time feed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence with the core capability front-loaded and the freshness caveat appended; no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and annotations cover safety for this simple read tool. The remaining gap is minor: 'session' is undefined (pre-market, regular hours, or last close) and error behavior for unresolvable symbols is unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Only one parameter, but schema description coverage is 0%, so the description must compensate. It does restate the 1-50 bound (already encoded as minItems/maxItems) but says nothing about symbol format, exchange suffixes, or what happens with invalid or delisted symbols.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Get') and resource ('latest session quotes') plus the cardinality limit (1-50 symbols). It distinguishes itself from streaming price feeds, but does not differentiate from the closely related sibling get_market_snapshot or get_market_overview.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'not real-time streaming prices' hints at when this is inappropriate but is not an explicit when-to-use rule, and no sibling alternative is named. An agent must infer from the sibling list whether it wants quotes or a snapshot.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_signalsA
Read-onlyIdempotent
Inspect

Get the combined Pivot/AlphaRank board; omit date for the latest visible session.

Pivot items contain only date, symbol, event, kind, direction and horizon (trading days). AlphaRank is returned in full. Free accounts retain the REST API's delayed-data window. Dates are YYYY-MM-DD.

NameRequiredDescriptionDefault
dateNo
marketNous

Output Schema

NameRequiredDescription
dateYes
pivotNo
marketYes
alpharankNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive and closed-world semantics, so the safety profile is free. The description adds genuinely non-obvious context: that free accounts inherit the REST API's delayed-data window, and that Pivot results are trimmed to a fixed field set while AlphaRank is returned in full. Notes on rate limits or empty/error responses are absent, keeping it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, each contributing distinct information, with the core purpose front-loaded before the payload details and caveats. The forced line breaks fragment sentences awkwardly but add no filler. Nothing wastes space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter read tool with full annotations and an output schema, the description covers what it returns, the date format and default behavior, and an account-tier caveat. The sole material hole is the undocumented market parameter, which could cause an agent to pass an invalid or unintended value. Return-value explanation is partly redundant with the output schema but still clarifies the Pivot/AlphaRank asymmetry.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load: it explains the date parameter's format ('Dates are YYYY-MM-DD') and the meaning of omitting it. The market parameter, which defaults to 'us', is never mentioned — no valid values, no default behavior, no effect on results. Half the parameters are documented, which is partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Get the combined Pivot/AlphaRank board') and the word 'combined' implicitly distinguishes it from the sibling tools get_pivot_signals and get_alpharank_signals. It goes further and characterizes what each half of the payload contains, so an agent can tell it apart from the single-source siblings without opening a schema. It stops short of explicitly naming those siblings or saying 'use this instead of calling both.'

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'omit date for the latest visible session' gives a clear default behavior for the optional parameter, and the delayed-data note hints at a usage constraint for free accounts. However, there is no explicit when-to-use/when-not-to-use statement relative to get_pivot_signals, get_alpharank_signals, or list_signal_dates, and no prerequisites or exclusions are named. Usage is implied rather than prescribed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_technical_analysisB
Read-onlyIdempotent
Inspect

Get a symbol's trend, momentum, key levels and technical interpretation.

NameRequiredDescriptionDefault
symbolYes

Output Schema

NameRequiredDescription
dateNo
quoteYes
trendYes
levelsNo
signalYes
symbolYes
signalsNo
narrativeNo
indicatorsNo
performanceNo
signal_scoreYesNet bullish score in the range [-1, 1]

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so safety is covered. The description adds only that the result includes trend, momentum, key levels and an interpretation — useful framing, but it does not say how the values are computed, what timeframe they assume, or how the interpretation should be read.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One front-loaded sentence with zero filler; every word names a distinct output component. Nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and annotations cover the safety profile. What remains missing is the one thing an agent cannot infer: what counts as a valid symbol and what timeframe the analysis assumes.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden and it does not: 'a symbol's' is the only hint, with no format, example, or asset-class scope (equity, index, option root). The schema's regex and 32-char limit constrain shape but not meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ('Get a symbol's trend, momentum, key levels and technical interpretation'), and the enumerated components make it clearly distinct from quote, signal and screener siblings. It stops short of naming a sibling alternative, but the analytical content sets it apart on its own.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to reach for this versus get_signals, get_pivot_signals, get_market_snapshot or get_quotes, all of which could plausibly overlap. No prerequisites, timeframe assumptions, or 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_unusual_optionsA
Read-onlyIdempotent
Inspect

Get unusual option activity grouped by symbol, up to 20 tickers per session.

Omit date for the latest visible session. Free-account data delays still apply. Activity is descriptive market data, not a recommendation or a trade instruction.

NameRequiredDescriptionDefault
dateNo

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds value beyond them: a 20-ticker result cap, a note that free-account data delays apply, and a disclaimer that the output is descriptive rather than advisory. It does not describe pagination or session-boundary behavior, but the added context is substantive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with scope and the ticker cap before the operational and compliance notes. The 'not a recommendation' disclaimer earns its place as a compliance constraint, though it could be trimmed slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. Combined with the date-omission rule, result cap, and data-delay caveat, an agent has enough to invoke it correctly; only sibling differentiation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the burden, and it does explain the meaning of the nullable date default ('omit date for the latest visible session'). It does not state the accepted date format or range, which the schema only implies via format: date.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get unusual option activity') plus the aggregation shape ('grouped by symbol') and a hard cap ('up to 20 tickers'). It is distinguishable from get_option_activity by the 'unusual' qualifier, but it never names that sibling or clarifies how the two differ.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Omit date for the latest visible session' is a concrete operational rule for the single optional parameter. However, there is no guidance on when to prefer this over get_option_activity, get_options_structure, or list_option_activity_dates, and no stated exclusions or preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_option_activity_datesB
Read-onlyIdempotent
Inspect

List unusual-options activity sessions visible to this account.

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
countYes
datesNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds a genuine scope constraint ('visible to this account'), which is useful, but says nothing about ordering, pagination, or how many sessions typically come back beyond the schema default.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. It is efficient but so terse that it leaves obvious questions unanswered that a second sentence could have closed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema and full annotations, the description only needs to cover intent, the meaning of 'session', and the limit. It covers intent but leaves 'session', the returned date granularity, and the limit semantics undefined, and never links to the sibling tools that consume these dates.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the single 'limit' parameter is undocumented in both schema and description; the description never says what is being limited (sessions? days?). The schema still supplies type, default 60, and 1-800 bounds, which makes the parameter largely self-explanatory despite the gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb (List) and resource (unusual-options activity sessions), so the agent knows it enumerates sessions rather than returning the activity data itself. It does not distinguish itself from close siblings like get_option_activity or get_unusual_options, which the name 'dates' hints at but the description never resolves.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this instead of get_option_activity or get_unusual_options, and no mention of what the listed sessions are used for (e.g. as input to a follow-up call). The only context is the vague scope phrase 'visible to this account'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_screener_presetsA
Read-onlyIdempotent
Inspect

Discover built-in screener strategy IDs and their criteria.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
presetsNo

TDQS

A3.7/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds only that the presets are 'built-in' and include 'criteria'; it says nothing about the count, stability, or structure of results, so the added value is modest.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; every word (built-in, strategy IDs, criteria) carries information about what is returned.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, an output schema present, and full annotation coverage, the description supplies the one thing structured fields cannot: what a 'preset' actually is (a built-in strategy with criteria). Only a direct pointer to run_screener_preset as the consumer is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline is 4. There is nothing for the description to disambiguate, and it correctly makes no parameter claims.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Discover') and a specific resource ('built-in screener strategy IDs and their criteria'), so an agent knows exactly what comes back. It implicitly distinguishes itself from the sibling run_screener_preset (list vs. execute), though it never names the sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the discovery step that yields IDs to feed into run_screener_preset or run_screener. There is no explicit 'use this when...' statement or named alternative, so routing requires inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_signal_datesB
Read-onlyIdempotent
Inspect

List published signal sessions visible to this account, newest first.

NameRequiredDescriptionDefault
limitNo
marketNous

Output Schema

NameRequiredDescription
countNo
datesNo
marketYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnly/idempotent/non-destructive and closed-world, so the safety profile is covered. The description adds two genuinely useful facts beyond that — result ordering ('newest first') and account-scoped visibility — but says nothing about pagination, whether limit truncates silently, or how the 800 max behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; scope and ordering arrive immediately. It is efficiently written, though arguably too terse given the undocumented parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value detail is unnecessary. But for a discovery tool with two undocumented parameters and no stated relationship to get_signals, the description does not give quite enough for confident invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the parameter burden and it does not. Neither 'limit' (default 60, max 800) nor 'market' (default 'us', maxLength 20) is mentioned, leaving the agent to guess whether 'market' is a country code, exchange, or segment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb+resource: 'List published signal sessions visible to this account, newest first,' which tells an agent exactly what it gets and in what order. It does not, however, distinguish this date/index tool from the many sibling signal getters (get_signals, get_pivot_signals, get_alpharank_signals), so an agent must infer the relationship.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no mention of the obvious pairing (call this to discover dates/availability, then call get_signals to fetch content). Nothing rules in or out alternatives, and no prerequisites are stated despite the implicit auth-scoped visibility.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_screenerB
Read-onlyIdempotent
Inspect

Screen the daily snapshot using typed filters, sorting and pagination.

Supports all, sp500 and nasdaq100 universes. Results are capped at 200 per page.

NameRequiredDescriptionDefault
requestYes

Output Schema

NameRequiredDescription
dateNo
limitNo
offsetNo
matchesNo
total_countNo
universe_sizeNoSymbols scanned, after the index filter and before the criteria

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds two useful operational facts not in annotations: the supported universes and the 200-row page cap. It does not say which session the 'daily snapshot' reflects (freshness/staleness), whether results are deterministic, or that pagination via offset requires a stable sort — the things an agent actually needs when chaining pages.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action, no filler. It could be one sentence without loss, but nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-shape explanation is not required, and annotations cover safety. For a tool with a large nested filter surface and a sibling preset workflow, though, the description omits snapshot freshness, filter combination semantics (AND across fields), and when pagination is needed — meaningful gaps for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Top-level schema description coverage is reported as 0% and the single `request` parameter is undocumented, so the description must carry meaning — it does establish that the request bundles filters, sorting and pagination, and names the three universes (also constrained by the StockIndex enum). It says nothing about the ~35 filter fields, default limit 50, or the default sort of change_percent desc, leaving the bulk of parameter meaning to the nested schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Screen the daily snapshot') plus the three mechanisms (typed filters, sorting, pagination), which is concrete enough to distinguish it from read-only snapshot siblings like get_market_snapshot. It does not name run_screener_preset or list_screener_presets, so the boundary with the preset path is inferred 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.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use guidance and no exclusions; nothing tells an agent to prefer run_screener_preset when a saved screen exists or to call list_screener_presets first. The only context offered is the universe list and the page cap, which are capability facts, not usage routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_screener_presetB
Read-onlyIdempotent
Inspect

Run a built-in screener preset in an index universe; no strategy is saved.

NameRequiredDescriptionDefault
indexNoall
limitNo
offsetNo
preset_idYes

Output Schema

NameRequiredDescription
dateNo
limitNo
offsetNo
matchesNo
total_countNo
universe_sizeNoSymbols scanned, after the index filter and before the criteria

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context that no strategy is saved, but does not mention pagination, permissions, or result limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no wasted words. It quickly communicates the action, scope, and a key persistence constraint.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-parameter tool with weak schema descriptions, the description leaves important gaps, especially how to obtain a valid preset_id and what limit/offset do. The output schema covers return values, but the invocation context is still under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description only hints at the preset and index-universe concepts, while schema description coverage is effectively 0% for the parameters. It does not explain preset_id validity, limit, offset, or the enum behavior for index.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: running a built-in screener preset in an index universe. The phrase 'no strategy is saved' helps distinguish it from a custom strategy workflow, though it does not name the sibling tools run_screener or list_screener_presets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when running a built-in preset, but gives no explicit when-to-use guidance, exclusions, or directions to discover preset IDs via list_screener_presets. It also does not clarify when to choose this over run_screener.

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.

  1. 2 tool updates
    • Changedget_pivot_signals7 fields changed
      • addedOutput schema / $defs / McpPivotSignal
        Added value: +{
        +  "description": "One Pivot event with only the fields exposed to MCP clients.",
        +  "properties": {
        +    "date": {
        +      "description": "Signal session (YYYY-MM-DD)",
        +      "title": "Date",
        +      "type": "string"
        +    },
        +    "direction": {
        +      "$ref": "#/$defs/PickDirection"
        +    },
        +    "event": {
        +      "$ref": "#/$defs/PickEvent"
        +    },
        +    "horizon": {
        +      "description": "Prediction horizon in trading days",
        +      "title": "Horizon",
        +      "type": "integer"
        +    },
        +    "kind": {
        +      "$ref": "#/$defs/PickKind"
        +    },
        +    "symbol": {
        +      "title": "Symbol",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "date",
        +    "symbol",
        +    "event",
        +    "kind",
        +    "direction",
        +    "horizon"
        +  ],
        +  "title": "McpPivotSignal",
        +  "type": "object"
        +}
      • removedOutput schema / $defs / PivotAction
        Removed value: -{
        -  "description": "The model's *state* label on the bar that triggered the event.\n\nContext only. It does **not** determine the side: an event is dated by its\ntrigger bar while its setup may be up to three sessions earlier, so by the\ntime a reversal confirms the state has often decayed to ``NEUTRAL`` or flipped\noutright. ``direction`` is the decision.",
        -  "enum": [
        -    "STRONGLY_BULLISH",
        -    "BULLISH",
        -    "NEUTRAL",
        -    "BEARISH",
        -    "STRONGLY_BEARISH"
        -  ],
        -  "title": "PivotAction",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / PivotPick
        Removed value: -{
        -  "description": "One published model event for one symbol on one session.",
        -  "properties": {
        -    "action": {
        -      "$ref": "#/$defs/PivotAction"
        -    },
        -    "close": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "title": "Close"
        -    },
        -    "confidence": {
        -      "description": "Conviction percentile within the day's full cross-section",
        -      "title": "Confidence",
        -      "type": "number"
        -    },
        -    "date": {
        -      "description": "Session the pick was published for (YYYY-MM-DD)",
        -      "title": "Date",
        -      "type": "string"
        -    },
        -    "days_to_max_gain": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Trading days from the signal to its best point",
        -      "title": "Days To Max Gain"
        -    },
        -    "days_to_max_loss": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Trading days from the signal to its worst point",
        -      "title": "Days To Max Loss"
        -    },
        -    "direction": {
        -      "$ref": "#/$defs/PickDirection"
        -    },
        -    "event": {
        -      "$ref": "#/$defs/PickEvent"
        -    },
        -    "excess_return": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "signal_return with the day's common market move removed",
        -      "title": "Excess Return"
        -    },
        -    "forward_return": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "The stock's own return over the horizon",
        -      "title": "Forward Return"
        -    },
        -    "horizon": {
        -      "default": 10,
        -      "description": "Prediction horizon in trading days",
        -      "title": "Horizon",
        -      "type": "integer"
        -    },
        -    "kind": {
        -      "$ref": "#/$defs/PickKind"
        -    },
        -    "market": {
        -      "default": "us",
        -      "title": "Market",
        -      "type": "string"
        -    },
        -    "max_gain": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Best the position was ever up during the horizon, intraday highs included",
        -      "title": "Max Gain"
        -    },
        -    "max_loss": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Worst the position was ever down during the horizon, intraday lows included",
        -      "title": "Max Loss"
        -    },
        -    "p_up": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Probability the horizon return is positive",
        -      "title": "P Up"
        -    },
        -    "path_complete": {
        -      "anyOf": [
        -        {
        -          "type": "boolean"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "False while the horizon has not fully elapsed, so a partial path is not read as a final one",
        -      "title": "Path Complete"
        -    },
        -    "pivot_hit": {
        -      "anyOf": [
        -        {
        -          "type": "boolean"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Whether this reversal landed within a few bars of a real swing point. Null for trend entries, which are not turning points.",
        -      "title": "Pivot Hit"
        -    },
        -    "price": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Un-rebased tradeable close",
        -      "title": "Price"
        -    },
        -    "rank": {
        -      "description": "Presentation order within its side that day; it gates nothing",
        -      "title": "Rank",
        -      "type": "integer"
        -    },
        -    "rationale": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "'; '-separated plain-language drivers",
        -      "title": "Rationale"
        -    },
        -    "score": {
        -      "description": "Signed conviction; positive is bullish",
        -      "title": "Score",
        -      "type": "number"
        -    },
        -    "signal_return": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "The same return from the position's side; negated for shorts",
        -      "title": "Signal Return"
        -    },
        -    "sustained_bullish": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Share of the last 40 sessions the model called bullish (context, not a gate)",
        -      "title": "Sustained Bullish"
        -    },
        -    "swing_position": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "0 = expected local low, 1 = expected local high",
        -      "title": "Swing Position"
        -    },
        -    "symbol": {
        -      "title": "Symbol",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "date",
        -    "symbol",
        -    "event",
        -    "kind",
        -    "direction",
        -    "rank",
        -    "action",
        -    "score",
        -    "confidence"
        -  ],
        -  "title": "PivotPick",
        -  "type": "object"
        -}
      • changedOutput schema / description
        Previous value: -"One session's events, split by side.\n\nAn empty response is a real answer: most sessions fire nothing, and 14 of\n754 walk-forward sessions fired nothing at all."New value: +"One session's slim Pivot events, preserving the board metadata."
      • changedOutput schema / properties / longs / items / $ref
        Previous value: -"#/$defs/PivotPick"New value: +"#/$defs/McpPivotSignal"
      • changedOutput schema / properties / shorts / items / $ref
        Previous value: -"#/$defs/PivotPick"New value: +"#/$defs/McpPivotSignal"
      • changedOutput schema / title
        Previous value: -"PivotPicksResponse"New value: +"McpPivotSignalsResponse"
    • Changedget_signals8 fields changed
      • addedOutput schema / $defs / McpPivotSignal
        Added value: +{
        +  "description": "One Pivot event with only the fields exposed to MCP clients.",
        +  "properties": {
        +    "date": {
        +      "description": "Signal session (YYYY-MM-DD)",
        +      "title": "Date",
        +      "type": "string"
        +    },
        +    "direction": {
        +      "$ref": "#/$defs/PickDirection"
        +    },
        +    "event": {
        +      "$ref": "#/$defs/PickEvent"
        +    },
        +    "horizon": {
        +      "description": "Prediction horizon in trading days",
        +      "title": "Horizon",
        +      "type": "integer"
        +    },
        +    "kind": {
        +      "$ref": "#/$defs/PickKind"
        +    },
        +    "symbol": {
        +      "title": "Symbol",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "date",
        +    "symbol",
        +    "event",
        +    "kind",
        +    "direction",
        +    "horizon"
        +  ],
        +  "title": "McpPivotSignal",
        +  "type": "object"
        +}
      • addedOutput schema / $defs / McpPivotSignalsResponse
        Added value: +{
        +  "description": "One session's slim Pivot events, preserving the board metadata.",
        +  "properties": {
        +    "counts": {
        +      "additionalProperties": {
        +        "type": "integer"
        +      },
        +      "description": "Events by type for this session",
        +      "title": "Counts",
        +      "type": "object"
        +    },
        +    "date": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Date"
        +    },
        +    "horizon": {
        +      "anyOf": [
        +        {
        +          "type": "integer"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "default": null,
        +      "title": "Horizon"
        +    },
        +    "longs": {
        +      "items": {
        +        "$ref": "#/$defs/McpPivotSignal"
        +      },
        +      "title": "Longs",
        +      "type": "array"
        +    },
        +    "market": {
        +      "title": "Market",
        +      "type": "string"
        +    },
        +    "shorts": {
        +      "items": {
        +        "$ref": "#/$defs/McpPivotSignal"
        +      },
        +      "title": "Shorts",
        +      "type": "array"
        +    },
        +    "total_count": {
        +      "default": 0,
        +      "title": "Total Count",
        +      "type": "integer"
        +    }
        +  },
        +  "required": [
        +    "market"
        +  ],
        +  "title": "McpPivotSignalsResponse",
        +  "type": "object"
        +}
      • removedOutput schema / $defs / PivotAction
        Removed value: -{
        -  "description": "The model's *state* label on the bar that triggered the event.\n\nContext only. It does **not** determine the side: an event is dated by its\ntrigger bar while its setup may be up to three sessions earlier, so by the\ntime a reversal confirms the state has often decayed to ``NEUTRAL`` or flipped\noutright. ``direction`` is the decision.",
        -  "enum": [
        -    "STRONGLY_BULLISH",
        -    "BULLISH",
        -    "NEUTRAL",
        -    "BEARISH",
        -    "STRONGLY_BEARISH"
        -  ],
        -  "title": "PivotAction",
        -  "type": "string"
        -}
      • removedOutput schema / $defs / PivotPick
        Removed value: -{
        -  "description": "One published model event for one symbol on one session.",
        -  "properties": {
        -    "action": {
        -      "$ref": "#/$defs/PivotAction"
        -    },
        -    "close": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "title": "Close"
        -    },
        -    "confidence": {
        -      "description": "Conviction percentile within the day's full cross-section",
        -      "title": "Confidence",
        -      "type": "number"
        -    },
        -    "date": {
        -      "description": "Session the pick was published for (YYYY-MM-DD)",
        -      "title": "Date",
        -      "type": "string"
        -    },
        -    "days_to_max_gain": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Trading days from the signal to its best point",
        -      "title": "Days To Max Gain"
        -    },
        -    "days_to_max_loss": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Trading days from the signal to its worst point",
        -      "title": "Days To Max Loss"
        -    },
        -    "direction": {
        -      "$ref": "#/$defs/PickDirection"
        -    },
        -    "event": {
        -      "$ref": "#/$defs/PickEvent"
        -    },
        -    "excess_return": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "signal_return with the day's common market move removed",
        -      "title": "Excess Return"
        -    },
        -    "forward_return": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "The stock's own return over the horizon",
        -      "title": "Forward Return"
        -    },
        -    "horizon": {
        -      "default": 10,
        -      "description": "Prediction horizon in trading days",
        -      "title": "Horizon",
        -      "type": "integer"
        -    },
        -    "kind": {
        -      "$ref": "#/$defs/PickKind"
        -    },
        -    "market": {
        -      "default": "us",
        -      "title": "Market",
        -      "type": "string"
        -    },
        -    "max_gain": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Best the position was ever up during the horizon, intraday highs included",
        -      "title": "Max Gain"
        -    },
        -    "max_loss": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Worst the position was ever down during the horizon, intraday lows included",
        -      "title": "Max Loss"
        -    },
        -    "p_up": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Probability the horizon return is positive",
        -      "title": "P Up"
        -    },
        -    "path_complete": {
        -      "anyOf": [
        -        {
        -          "type": "boolean"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "False while the horizon has not fully elapsed, so a partial path is not read as a final one",
        -      "title": "Path Complete"
        -    },
        -    "pivot_hit": {
        -      "anyOf": [
        -        {
        -          "type": "boolean"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Whether this reversal landed within a few bars of a real swing point. Null for trend entries, which are not turning points.",
        -      "title": "Pivot Hit"
        -    },
        -    "price": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Un-rebased tradeable close",
        -      "title": "Price"
        -    },
        -    "rank": {
        -      "description": "Presentation order within its side that day; it gates nothing",
        -      "title": "Rank",
        -      "type": "integer"
        -    },
        -    "rationale": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "'; '-separated plain-language drivers",
        -      "title": "Rationale"
        -    },
        -    "score": {
        -      "description": "Signed conviction; positive is bullish",
        -      "title": "Score",
        -      "type": "number"
        -    },
        -    "signal_return": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "The same return from the position's side; negated for shorts",
        -      "title": "Signal Return"
        -    },
        -    "sustained_bullish": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "Share of the last 40 sessions the model called bullish (context, not a gate)",
        -      "title": "Sustained Bullish"
        -    },
        -    "swing_position": {
        -      "anyOf": [
        -        {
        -          "type": "number"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "description": "0 = expected local low, 1 = expected local high",
        -      "title": "Swing Position"
        -    },
        -    "symbol": {
        -      "title": "Symbol",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "date",
        -    "symbol",
        -    "event",
        -    "kind",
        -    "direction",
        -    "rank",
        -    "action",
        -    "score",
        -    "confidence"
        -  ],
        -  "title": "PivotPick",
        -  "type": "object"
        -}
      • removedOutput schema / $defs / PivotPicksResponse
        Removed value: -{
        -  "description": "One session's events, split by side.\n\nAn empty response is a real answer: most sessions fire nothing, and 14 of\n754 walk-forward sessions fired nothing at all.",
        -  "properties": {
        -    "counts": {
        -      "additionalProperties": {
        -        "type": "integer"
        -      },
        -      "description": "Events by type for this session",
        -      "title": "Counts",
        -      "type": "object"
        -    },
        -    "date": {
        -      "anyOf": [
        -        {
        -          "type": "string"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "title": "Date"
        -    },
        -    "horizon": {
        -      "anyOf": [
        -        {
        -          "type": "integer"
        -        },
        -        {
        -          "type": "null"
        -        }
        -      ],
        -      "default": null,
        -      "title": "Horizon"
        -    },
        -    "longs": {
        -      "items": {
        -        "$ref": "#/$defs/PivotPick"
        -      },
        -      "title": "Longs",
        -      "type": "array"
        -    },
        -    "market": {
        -      "title": "Market",
        -      "type": "string"
        -    },
        -    "shorts": {
        -      "items": {
        -        "$ref": "#/$defs/PivotPick"
        -      },
        -      "title": "Shorts",
        -      "type": "array"
        -    },
        -    "total_count": {
        -      "default": 0,
        -      "title": "Total Count",
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "market"
        -  ],
        -  "title": "PivotPicksResponse",
        -  "type": "object"
        -}
      • changedOutput schema / description
        Previous value: -"Combined signal board for a single coherent market session."New value: +"Combined board with slim Pivot events and the full AlphaRank section."
      • changedOutput schema / properties / pivot / anyOf
        Previous value: -[
        -  {
        -    "$ref": "#/$defs/PivotPicksResponse"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "$ref": "#/$defs/McpPivotSignalsResponse"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • changedOutput schema / title
        Previous value: -"SignalsResponse"New value: +"McpSignalsResponse"
  2. 18 tool updates
    • First observedget_alpharank_history
    • First observedget_alpharank_signals
    • First observedget_gamma_exposure
    • First observedget_market_movers
    • First observedget_market_overview
    • First observedget_market_snapshot
    • First observedget_option_activity
    • First observedget_options_structure
    • First observedget_pivot_signals
    • First observedget_quotes
    • First observedget_signals
    • First observedget_technical_analysis
    • First observedget_unusual_options
    • First observedlist_option_activity_dates
    • First observedlist_screener_presets
    • First observedlist_signal_dates
    • First observedrun_screener
    • First observedrun_screener_preset

Publisher details

Operator
PredixLab
Operator website
https://predixlab.com
Vendor relationship
Unknown
Trust center
Unknown
Restrictions
Unknown

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Remote MCP server that lets AI assistants read tracked competitive intelligence — competitor news, reviews, website changes, social posts and ads — and act on it by managing projects, competitors, battle cards, reports and canvases. Every answer carries a source and a date, and write actions only publish when explicitly shared.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    23 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources