market-mcp
The server provides a comprehensive suite of market data, technical analysis, screening, prediction markets, and backtesting tools — no API keys or paid accounts required.
Market Data & Prices
Fetch current prices and daily changes for single or multiple instruments (crypto, global equities, Indonesian stocks), search symbols by company name, and get a cross-market snapshot including indices, VIX, crypto, and commodities. Batch price lookups (up to 50 symbols) report failed symbols without breaking the call.
Technical Analysis
Perform full technical analysis with RSI, MACD, Bollinger Bands, EMAs, ATR, ADX, Supertrend, Stochastic, support/resistance, and a composite rating that explains its reasoning. Run multi-timeframe analysis to check agreement across weekly to hourly charts, and detect 13 candlestick patterns with trend context.
Screeners & Scanners
Screen crypto pairs by volume and price change, identify top crypto movers with liquidity filters, scan bundled stock universes (IDX: 277 tickers, US: 117 tickers) by daily moves, and run technical scans for oversold/overbought, trends, volume spikes, or squeeze setups.
Prediction Markets
Browse, search, and view details of active Polymarket prediction markets, including outcome token IDs and historical probability data.
Strategy Backtesting
Access 9 configurable strategies, backtest individually with realistic costs (fees + slippage) and no look-ahead bias, compare all strategies against buy-and-hold, and validate via walk-forward analysis with a robust verdict system to detect overfitting.
All responses follow a consistent envelope with clear error codes and retryable flags.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@market-mcpwhat's the current price of Bitcoin?"
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.
market-mcp
An MCP server that gives an AI assistant real market data, technical analysis, prediction-market odds and an honest strategy backtester — plus a scheduled scanner that feeds a live dashboard and Telegram alerts.
Covers four things in one server:
Domain | Source | No key needed |
Crypto | Binance public spot API | ✅ |
Global equities / ETFs / indices / FX | Yahoo Finance | ✅ |
Indonesian equities (IDX) | Yahoo Finance | ✅ |
Prediction markets | Polymarket Gamma + CLOB | ✅ |
No API keys, no accounts, no paid tiers. Runtime dependencies are mcp and
httpx — indicators and the backtester are pure Python, so there is no
pandas/numpy wheel to fight with.
Install
git clone https://github.com/kumaraprayoga68-sketch/market-mcp
cd market-mcp
python -m venv .venv
.venv/Scripts/activate # Linux/macOS: source .venv/bin/activate
pip install -e .Then point your MCP client at it. For Claude Desktop, add this to
claude_desktop_config.json (use the absolute path to the venv's Python):
{
"mcpServers": {
"market": {
"command": "C:\\path\\to\\market-mcp\\.venv\\Scripts\\python.exe",
"args": ["-m", "market_mcp.server"]
}
}
}For an HTTP transport instead of stdio:
market-mcp --transport streamable-http --port 8000Related MCP server: pmxt-mcp
The 20 tools
Prices
get_price— price, daily change, day range, 52-week positionget_prices— many symbols at once; unresolvable ones are reported, not fatalsearch_symbol— company name → tickermarket_snapshot— US/Asia indices, VIX, crypto, gold, oil, USD/IDR
Analysis
technical_analysis— RSI, MACD, Bollinger, EMA 20/50/200, ATR, ADX, Supertrend, Stochastic + a composite ratingmulti_timeframe_analysis— weekly → hourly, and whether they agreecandlestick_patterns— 13 patterns, each tagged with the trend it appeared in
Screeners
crypto_screener— Binance spot by volume and 24h changecrypto_top_movers— gainers/losers with a liquidity floorstock_screener— scan the bundled IDX (277) or US (117) universetechnical_scan— scan for a setup (oversold, uptrend, squeeze, volume spike…), not just a price movelist_universes
Prediction markets
prediction_markets— most active marketsprediction_search— keyword search, question matches outrank description matchesprediction_market_detail— outcomes, prices, token idsprediction_price_history— how the market's probability has moved
Backtesting
list_strategies— 9 strategies and their parametersbacktest_strategy— one strategy, one instrument, with costscompare_strategies— rank all 9 against buy-and-holdwalk_forward_backtest— out-of-sample validation with an overfitting verdict
Scheduled scans, alerts and dashboard
Beyond the MCP server, the repo runs itself on a schedule:
GitHub Actions (every 4h)
└─ scripts/run_scan.py
├─ snapshots/latest.json ──► Vercel dashboard (reads it straight from GitHub)
└─ Telegram alert ──► only for setups that are new since the last runsnapshots/latest.json is committed back to the repo, so the dashboard picks up
fresh data without a redeploy: the cron owns the data, Vercel only renders it.
Telegram alerts
Alerts fire only on findings absent from the previous snapshot. A scan that runs every four hours will keep matching the same oversold ticker for days, and an alert that fires every run is an alert you stop reading.
Set these in the repo under Settings → Secrets and variables → Actions:
Secret | Where to get it |
| @BotFather → your bot → API token |
| message your bot, then open |
Without them the job still runs and simply skips the alert. Never commit the token — it is a bearer credential for the whole bot.
Running the scan by hand
python scripts/run_scan.py --quick --no-alert--quick shrinks the universes and skips backtests; --no-alert never sends
Telegram. A full run takes a few minutes and produces roughly 80 KB of JSON.
Every section is independently guarded, so an outage at one venue degrades the
snapshot rather than losing the run. Failures land in snapshot.errors and the
dashboard shows them rather than pretending the data is complete.
Dashboard
Live: market-mcp-dashboard.vercel.app
dashboard/ is a Next.js app with no UI dependencies beyond React.
cd dashboard && npm install && npm run devIt fetches snapshots/latest.json over HTTP with a 5-minute revalidate, so new
scan data appears on its own. Only code changes need a redeploy:
cd dashboard && vercel deploy --prodTo get automatic deploys on every code push, connect the repository under
Project Settings → Git and set Root Directory to dashboard. That last
part matters and cannot be set from the CLI: without it Vercel builds from the
repository root, finds no package.json, and the build fails.
Point the dashboard at a different data source with the SNAPSHOT_URL
environment variable.
Two things this server is careful about
The backtester cannot see the future
A strategy sees bar i only after it closes, so the position it asks for is held during bar i+1. This is enforced by the engine, not by convention, and it is asserted in the test suite: an "oracle" strategy that reads the next bar returns ~5600% on the same data where the identical rule, lagged one bar, returns ~19%. If look-ahead ever leaked in, both numbers would be huge.
Costs are charged on position changes, so a long→short flip pays twice. Every
result reports buy_and_hold_return_pct beside it, because beating a flat
market is not an edge.
walk_forward_backtest is the tool that matters. It re-optimises parameters on
data up to each fold and scores the fold that follows, then compares in-sample
against out-of-sample and returns a verdict — robust, acceptable,
fragile, likely_overfitted or overfitted. Most strategies that look great
in a single backtest come back overfitted, which is the point.
The rating explains itself, and knows when oscillators lie
technical_analysis returns a composite score, but also every individual vote
that produced it, so the reasoning can be inspected rather than trusted.
RSI pins near 100 for the whole of a real rally. A naive vote counter reads that as bearish, lets it cancel the trend indicators, and rates an unmistakable uptrend "neutral". When ADX shows a strong trend, this server drops oscillator votes that oppose the trend and says so in the vote's reason. ADX itself never votes on direction — it only scales confidence.
Output shape
Every tool returns the same envelope:
{ "ok": true, "data": { ... }, "error": null }{ "ok": false, "data": null,
"error": { "code": "rate_limited", "message": "...", "retryable": true } }retryable distinguishes "the upstream is having a moment" from "you asked for
something that does not exist", so a client knows whether trying again is
worthwhile. Codes: bad_input, not_found, upstream_error, rate_limited,
timeout, internal.
Layout
src/market_mcp/
├── server.py MCP entry point
├── core/ error envelope, TTL cache, shared HTTP with retry
├── providers/ yahoo, binance, idx, polymarket — plain async functions
├── indicators.py pure-Python TA
├── patterns.py candlestick detection
├── analysis.py indicator snapshot + composite rating
├── scanning.py signal matching, shared by the MCP tool and the cron job
├── alerting.py snapshot diffing and Telegram formatting
├── market_data.py one candle loader across all venues
├── backtest/ engine, strategies, walk-forward
└── tools/ MCP tool definitions
scripts/run_scan.py the scheduled job
dashboard/ Next.js dashboard for Vercel
snapshots/ latest.json + trimmed history, written by the cron
data/ idx.txt (277), us.txt (117)
tests/ 130 tests, no network requiredProviders know nothing about MCP; tools know nothing about HTTP. Adding a venue means writing one provider module that returns the shared candle shape.
Tests
pytest130 tests, all offline — they cover indicator known-answer cases, engine invariants (look-ahead, cost accounting, drawdown), symbol normalisation, the error envelope, cache de-duplication, alert de-duplication, and server wiring. CI runs them on Python 3.10, 3.12 and 3.14, plus a smoke job that starts the server and checks it serves all 20 tools.
Adding a strategy
Write a function that maps candles to positions (+1 long, 0 flat, -1
short), then register it:
def my_strategy(candles, period: int = 14) -> list[int]:
r = ta.rsi(series(candles, "close"), period)
return [0 if v is None else (1 if v < 25 else 0) for v in r]
Strategy(
name="my_strategy",
description="...",
fn=my_strategy,
defaults={"period": 14},
grid={"period": [7, 14, 21]}, # searched by walk-forward
)Warm-up bars must be 0 — a strategy is never allowed to act on an undefined
indicator. test_every_strategy_produces_valid_signals enforces the contract
for anything in the registry.
Limits
Binance geo-blocks US cloud regions.
api.binance.comanswers HTTP 451 from GitHub Actions runners and Vercel functions alike (verified fromiad1). The provider fails over todata-api.binance.vision, which serves the same market-data routes from those regions and is remembered for the rest of the process. If you host this somewhere new and crypto sections come back empty, check for 451 before suspecting anything else.Yahoo caps intraday history (7 days of 1-minute bars, 60 days of sub-hourly).
Polymarket has no server-side text search, so
prediction_searchscans the most active markets rather than every market ever created.IDX has no free bulk screener, so
stock_screenerquotes a curated universe file rather than the whole exchange.Backtests model costs as flat fee + slippage. Real fills, funding, borrow and liquidity are not modelled.
Not affiliated with TradingView, Binance, Yahoo or Polymarket. Information only — not financial advice.
Available Tools
20 toolsbacktest_strategyA
Backtest one strategy on one instrument.
Args: symbol: Ticker (BTC, AAPL, BBCA). strategy: Strategy name from list_strategies. market: "crypto", "stock" or "idx". interval: Candle size (15m, 30m, 1h, 4h crypto-only, 1d, 1w). bars: Candles to test over (30-1500). params: Strategy parameter overrides, e.g. {"period": 21}. fee_bps: Round-trip fee in basis points per position change. slippage_bps: Assumed slippage in basis points per position change. include_trades: Return the full trade log as well as the metrics.
Signals are acted on at the next bar, so results contain no
look-ahead. Always compare total_return_pct against
buy_and_hold_return_pct — beating a flat market is not an edge.
| Name | Required | Description | Default |
|---|---|---|---|
| bars | No | ||
| market | No | crypto | |
| params | No | ||
| symbol | Yes | ||
| fee_bps | No | ||
| interval | No | 1d | |
| strategy | Yes | ||
| slippage_bps | No | ||
| include_trades | 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 full burden. It discloses a key behavioral trait: 'Signals are acted on at the *next* bar, so results contain no look-ahead.' It also provides interpretive guidance on comparing total_return_pct against buy_and_hold_return_pct to avoid misreading results. This exceeds the base requirement but does not cover every possible trait (e.g., cost model specifics).
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: a one-sentence purpose, an Args list, then a behavioral note. No wasted words; every line adds value. The key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, the description need not explain return values. It fully covers parameter semantics, the critical look-ahead behavior, and how to interpret results. It is complete for an agent to select and invoke correctly, and to understand the output's meaning.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero description coverage, but the description compensates fully with an Args block that explains all 9 parameters, including valid values (e.g., interval examples, bars range, fee_bps units). This is exactly what the schema lacks.
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 'Backtest one strategy on one instrument,' which is a specific verb+resource+scope. It clearly distinguishes from siblings like compare_strategies and walk_forward_backtest by emphasizing single strategy/single instrument.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context that this tool is for a single strategy/instrument and references list_strategies as a source for valid strategy names. However, it does not explicitly mention alternatives like compare_strategies for multiple strategies or walk_forward_backtest for walk-forward analysis, so usage guidance is implied rather than fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
candlestick_patternsA
Detect candlestick patterns in the most recent bars.
Args: symbol: Ticker. market: "crypto", "stock" or "idx". interval: Candle size. lookback: How many recent bars to scan (1-20).
Each hit reports the trend it appeared in and whether that makes it a genuine reversal — a hammer inside an uptrend is not a bottom signal.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | stock | |
| symbol | Yes | ||
| interval | No | 1d | |
| lookback | 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. It adds valuable context by explaining that each hit reports the trend it appeared in and whether it is a genuine reversal, with a concrete example of a hammer in an uptrend. This goes beyond basic functionality and informs the user about the tool's interpretive behavior, which is a significant transparency bonus.
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 an introductory sentence, an Args section explaining each parameter, and a final note adding important context. Every sentence contributes value without redundant fluff. The formatting is clean and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists to handle return values, so the description is relieved from explaining outputs. The description covers the core purpose, all parameters, and a key interpretive nuance (trend context). Missing elements include potential limitations (e.g., which pattern types are supported) and behavior when no patterns are found, but overall it is sufficiently complete for a single-purpose detection 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 compensate. It does so by providing plain-language definitions for all four parameters: symbol ('Ticker'), market (with explicit allowed values 'crypto', 'stock', or 'idx'), interval ('Candle size'), and lookback (with a range '1-20'). While 'interval: Candle size' is somewhat vague, it still provides meaning beyond the raw schema, making the tool more usable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Detect candlestick patterns in the most recent bars.' The verb 'detect' is specific, and the resource 'candlestick patterns' is narrowly defined, distinguishing it from broader tools like technical_analysis or multi_timeframe_analysis. The scope ('most recent bars') adds further specificity.
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 detecting candlestick patterns but does not explicitly state when to use this tool versus alternatives. There is no mention of when not to use it or comparison with sibling tools like technical_analysis or market_snapshot. The note about trend context provides some guidance on interpretation, but no explicit exclusions or alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_strategiesA
Run every strategy on one instrument and rank them.
Args: symbol: Ticker. market: "crypto", "stock" or "idx". interval: Candle size. bars: Candles to test over. fee_bps: Fee in basis points per position change. slippage_bps: Slippage in basis points per position change. rank_by: "sharpe", "total_return_pct", "calmar" or "profit_factor".
A leaderboard on one symbol over one window is a weak signal — the winner is partly luck. Confirm anything promising with walk_forward_backtest before trusting it.
| Name | Required | Description | Default |
|---|---|---|---|
| bars | No | ||
| market | No | crypto | |
| symbol | Yes | ||
| fee_bps | No | ||
| rank_by | No | sharpe | |
| interval | No | 1d | |
| slippage_bps | 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 burden of behavioral disclosure. It does disclose that the tool runs every strategy and ranks results, and it adds a caveat about statistical reliability. However, it does not explicitly state side effects, computational cost, data requirements, or that it is a non-trading simulation. The statistical caution is useful but not a substitute for operational transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-line purpose, a concise argument list that maps to the schema, and a two-sentence caution. Every line earns its place; no fluff. The most important usage warning is placed at the end for emphasis without bloating the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, no annotations, and an output schema present, the description provides sufficient context: purpose, parameters, and a statistical validity caveat that affects decision-making. It could mention that it is a historical backtest or that it assumes availability of the listed market/interval, but the sibling context and note about walk_forward_backtest fill that gap. The output schema handles return value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by defining all seven parameters in the Args section, including enumerated values for market ('crypto', 'stock', 'idx') and rank_by ('sharpe', 'total_return_pct', 'calmar', 'profit_factor'). It provides meaningful semantics like 'Candles to test over' and 'Fee in basis points per position change.' Minor gaps remain: no ranges, units for interval, or constraints, but coverage is solid.
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 action: 'Run every strategy on one instrument and rank them,' which clearly states what the tool does and its output. It distinguishes itself from siblings like backtest_strategy and walk_forward_backtest by emphasizing the comparative, one-symbol ranking nature. The resource and result are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns that a leaderboard over one window is a weak signal and instructs to confirm findings with walk_forward_backtest. This gives clear when-to-use and when-not-to-use guidance, and names the appropriate alternative. It implicitly contrasts with single-strategy backtests, aiding tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_screenerA
Screen Binance spot pairs on 24h price and volume.
Args: quote_asset: Quote leg to screen against (USDT, USDC, BTC...). min_volume_usd: Minimum 24h turnover. Raising this is the main lever for filtering out pairs too illiquid to trade. min_change_pct: Keep only pairs up at least this much over 24h. max_change_pct: Keep only pairs below this 24h change. sort_by: "volume", "change" or "change_asc". limit: Rows to return.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sort_by | No | volume | |
| quote_asset | No | USDT | |
| max_change_pct | No | ||
| min_change_pct | No | ||
| min_volume_usd | 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. It explains the filtering logic for each parameter but does not describe the output format, whether the operation is read-only, data freshness, or any potential side effects. It fails to explicitly state that it returns matching pairs or that it only reads data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, starting with a clear one-sentence summary followed by a bulleted Args list. Every line adds value, and the formatting makes it easy to scan. 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?
The description covers all six parameters and the core action, which is sufficient for basic invocation. An output schema exists, so return-value details are not required. However, it lacks information on edge cases (e.g., behavior when no pairs match) and does not mention the maximum allowed limit, leaving some minor gaps for a tool of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, but the description compensates thoroughly by explaining each parameter's meaning, including examples (USDT, USDC, BTC), acceptable values for sort_by, and the practical impact of min_volume_usd. This goes far beyond the schema field names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: screening Binance spot pairs based on 24h price and volume. It uses a specific verb ('Screen') and identifies the resource (Binance spot pairs). However, it does not explicitly distinguish itself from sibling tools like crypto_top_movers or technical_scan, so it does not fully earn a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides parameter-level guidance (e.g., raising min_volume_usd filters illiquid pairs) but does not state when to use this tool versus alternatives such as stock_screener or technical_scan. There is no explicit 'when to use' or 'when not to use' context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
crypto_top_moversA
Get the biggest 24h movers on Binance spot.
Args: quote_asset: Quote leg (USDT, USDC...). direction: "gainers", "losers" or "both". min_volume_usd: Liquidity floor — without one the list fills with thin pairs whose percentage moves are noise. limit: Rows per direction.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| direction | No | gainers | |
| quote_asset | No | USDT | |
| min_volume_usd | 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 full burden. It discloses the Binance spot scope and the liquidity floor rationale, but doesn't mention other behavioral aspects like sort order, pagination, or rate limits. 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 concise yet complete: a one-line statement of purpose and a compact Args list. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple and the output schema exists, so return values don't need description. All four parameters are clearly documented, and the tool's scope and important usage caveat are covered. It's nearly complete, though a note on sorting or default behavior would make it fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates exceptionally well by explaining each parameter: quote_asset gives examples, direction enumerates options, min_volume_usd explains its purpose and consequence, and limit clarifies it applies per direction. This adds crucial 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 clearly states the tool gets the biggest 24h movers on Binance spot, using a specific verb ('Get') and resource ('movers') with a defined scope (Binance spot). This distinguishes it from sibling tools like get_price, get_prices, and crypto_screener, which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context, especially for the min_volume_usd parameter, explaining that without a liquidity floor the list fills with thin pairs whose moves are noise. It doesn't explicitly name alternatives or exclusions, but the purpose is specific enough to make the intended use obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_priceA
Get the current price and daily change for one instrument.
Args: symbol: Ticker. Crypto accepts BTC, BTCUSDT or BTC/USDT; equities use the Yahoo symbol (AAPL, MSFT); IDX accepts BBCA or BBCA.JK. market: One of "crypto", "stock" (global equities/ETFs/indices/FX) or "idx" (Indonesia Stock Exchange).
Returns price, previous close, change %, day range and — for equities — the 52-week range and where price sits inside it.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | stock | |
| 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 shoulders the burden of behavioral disclosure. It clearly explains what the tool returns ('price, previous close, change %, day range and — for equities — the 52-week range and where price sits inside it') and documents accepted symbol formats per market. However, it does not mention potential errors, rate limits, or that it is a read-only operation (which is implied but not explicit). This is more than adequate for a simple price lookup tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized and well-structured, using 'Args:' and 'Returns:' sections. Every sentence provides necessary information: symbol formats, market values, and return fields. There is no fluff or repetition, and the content is front-loaded with the core action first.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 params, 1 required) and the presence of an output schema, the description covers all necessary aspects for correct invocation: what it does, how to specify symbol and market, and what data is returned. It is complete enough for an agent to select and use the tool effectively without 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?
Schema description coverage is 0%, so the description fully compensates by explaining both parameters in detail. It describes the 'symbol' parameter with concrete examples for each market (BTC, BTCUSDT, AAPL, BBCA) and defines the 'market' parameter's allowed values ('crypto', 'stock', 'idx'). This adds substantial meaning beyond the bare schema, making invocation correct without needing external knowledge.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get the current price and daily change for one instrument.' It specifies a verb ('Get'), resource ('current price and daily change'), and scope ('one instrument'), which distinguishes it from sibling tools like get_prices (plural). This is a specific and unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool, detailing accepted symbol formats per market (crypto, stock, idx) and explaining return data. It implicitly differentiates from get_prices by emphasizing 'one instrument,' but it does not explicitly name alternatives or state when-not-to-use scenarios. This aligns with 'clear context, no exclusions'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pricesA
Get current prices for several instruments at once.
Args: symbols: Up to 50 tickers. market: "crypto", "stock" or "idx" — applies to every symbol.
Symbols that cannot be resolved are reported in failed rather than
failing the whole call.
| Name | Required | Description | Default |
|---|---|---|---|
| market | No | stock | |
| symbols | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without annotations, the description carries the full burden of behavioral disclosure. It reveals a key behavior: unresolved symbols are reported in 'failed' rather than failing the whole call, which is valuable for agents. It does not mention rate limits or data freshness, but the disclosed partial-failure behavior is significant.
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-organized: a one-sentence purpose, followed by clear parameter definitions, and a note on failure behavior. No redundant or vague wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity and the presence of an output schema, the description covers essential aspects: batch pricing, market scope, and partial failure handling. It does not detail return fields, but the output schema covers that. It is sufficiently complete for a read-only price tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It explains 'symbols' as up to 50 tickers and clarifies that 'market' can be 'crypto', 'stock', or 'idx' and applies uniformly. This adds meaning not in the schema, though exact ticker formats are not specified.
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 current prices for several instruments at once' with a specific verb and resource, and the 'at once' phrase distinguishes it from the sibling tool 'get_price' which likely handles single instruments. It also specifies market types, further clarifying its scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: when you need current prices for multiple instruments concurrently. It does not explicitly exclude alternatives like 'get_price' for single instruments, and there are no when-not-to-use statements, but the batch context is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_strategiesA
List the available backtest strategies with their parameters.
Call this before backtest_strategy if you are unsure of a strategy name or which parameters it accepts.
| 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 full burden. It implicitly conveys a read-only listing operation and specifies the return includes parameters, which is sufficient for a simple list tool, though it does not mention rate limits or ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the main action, followed by a clear usage guideline. Every word earns its place, with no waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, zero parameters, and presence of an output schema, the description is complete: it states the action, the content (strategy names and parameters), and when to use it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description correctly adds no extra parameter information. This meets the baseline of 4 for tools with no 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 (List) and resource (backtest strategies) and clarifies that it returns their parameters, clearly distinguishing it from sibling tools like backtest_strategy and compare_strategies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call this before backtest_strategy when unsure of a strategy name or parameters, naming the alternative tool and the condition for use, which provides excellent guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_universesA
List the bundled stock ticker universes and their sizes.
| 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 disclosing behavior. It states the tool lists universes and sizes, implying a read-only operation, and adds the detail 'bundled' to indicate these are pre-defined sets. However, it does not explicitly state whether side effects or restrictions apply, though for a simple list this is minimal. The description is adequate but not rich in behavioral disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the action and resource, with no redundant information. Every word contributes to meaning ('bundled', 'stock ticker universes', 'sizes').
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 list tool, the description is largely sufficient. It clearly states what the tool returns (universes and sizes) and an output schema exists to document the return structure. There is no missing contextual information that would confuse an agent. A minor gap is the lack of explanation for what 'bundled' means, but that is not critical for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so no parameter explanations are needed. The schema coverage is effectively 100% (empty properties), and the description adds relevant context about the output (universes and sizes). Per rubric, zero parameters warrants a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the primary action ('List') and the specific resource ('bundled stock ticker universes') plus the additional detail 'and their sizes'. This distinguishes it from sibling tools like list_strategies (which lists strategies) and get_price/get_prices (which fetch price 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 when to use the tool (when you need to know available stock ticker universes and their sizes) but provides no explicit when-to-use or alternative guidance. There are no direct alternatives among siblings, so the usage is straightforward, but the lack of explicit context keeps it at a baseline level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
market_snapshotA
Get a cross-market overview: US and Asian indices, VIX, crypto, FX and commodities.
Includes the IDX Composite (^JKSE) and USD/IDR. Use this to answer "how are markets doing" without picking symbols by hand.
| 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 full burden. It discloses the scope of data (indices, VIX, crypto, FX, commodities) and specific inclusions (^JKSE, USD/IDR). However, it does not explicitly state read-only behavior, data freshness, or any limitations. Since this is a get operation, the risk is low, but the disclosure is minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action and scope. It includes a clear use case without extraneous detail, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description adequately covers the tool's purpose and scope. It mentions specific assets and a use case, which is complete for a low-complexity snapshot tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so schema coverage is trivially 100%. The baseline for 0 parameters is 4, and the description appropriately does not need to explain any 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 'Get a cross-market overview: US and Asian indices, VIX, crypto, FX and commodities' with a specific verb and resource. It clearly distinguishes from sibling tools like get_price or get_prices by emphasizing a market-wide snapshot rather than a single symbol query.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Use this to answer "how are markets doing" without picking symbols by hand', providing a clear when-to-use context. It implies an alternative approach (manually selecting symbols) but does not name specific sibling tools, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
multi_timeframe_analysisA
Check whether timeframes agree on direction.
Args: symbol: Ticker. market: "crypto", "stock" or "idx". bars: Candles per timeframe.
Runs the composite rating on weekly through hourly candles. Aligned timeframes are the setups worth acting on; conflict between them is the usual reason a signal on one chart fails.
| Name | Required | Description | Default |
|---|---|---|---|
| bars | No | ||
| market | No | stock | |
| 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 full burden. It discloses the operational behavior: 'Runs the composite rating on weekly through hourly candles' and indicates it only checks alignment, implying no side effects. While it lacks rate limits or exact output details, it clearly signals a read-only analysis tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-line purpose, a concise Args list, and two sentences of interpretive guidance. Every sentence earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an analysis tool with no annotations and an existing output schema (which likely covers return values), the description covers purpose, parameter semantics, and interpretation. It could specify the exact timeframe list or mention alternatives, but overall it is quite 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 explain parameters. It does so effectively: symbol is 'Ticker', market specifies allowed values "crypto", "stock" or "idx", and bars means 'Candles per timeframe'. This adds meaning beyond the raw schema types and defaults, though 'Ticker' is somewhat tautological.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Check whether timeframes agree on direction.' It further distinguishes itself from sibling analysis tools by specifying it runs a composite rating across weekly through hourly candles, making its scope and function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear usage context: 'Aligned timeframes are the setups worth acting on; conflict between them is the usual reason a signal on one chart fails.' This implies when to use the tool (for multi-timeframe confirmation), but it does not explicitly name alternative tools or state when not to use it, stopping short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prediction_market_detailA
Get full detail for one prediction market, including outcome token ids.
Args: slug_or_id: Market slug (from a polymarket.com URL) or numeric id.
The token_id on each outcome is what prediction_price_history needs.
| Name | Required | Description | Default |
|---|---|---|---|
| slug_or_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 provided, the description uses 'Get' to signal a read-only operation and names the key included field (token_id). It adds a practical downstream dependency note, though it does not discuss error cases or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences: a summary line, an Args block, and a dependency note. No filler; all content is useful.
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 detail endpoint with an output schema, the description fully covers purpose, parameter format, and downstream usage. The token_id note supplies the key integration detail needed by sibling tool prediction_price_history.
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 only parameter, slug_or_id, is explained as a 'Market slug (from a polymarket.com URL) or numeric id,' adding meaningful format and source context beyond the schema's bare string type. This compensates 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 opens with 'Get full detail for one prediction market' using a specific verb and resource, and explicitly notes outcome token ids. This distinguishes it from sibling list/search tools like prediction_markets and prediction_search.
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 clearly defines the target use case—retrieving a single market's full detail—and connects the result to prediction_price_history via token_id. It does not explicitly list exclusions or alternatives, but the context is unambiguous given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prediction_marketsA
List the most active Polymarket prediction markets.
Args: limit: Markets to return (max 100). order: "volume24hr", "volume", "liquidity" or "endDate". tag: Optional category slug, e.g. "politics", "crypto", "sports".
Prices are probabilities: 0.63 means the market prices that outcome at 63%.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| order | No | volume24hr |
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 goes beyond a simple listing by explaining that 'Prices are probabilities: 0.63 means the market prices that outcome at 63%', which is a key behavioral trait for interpreting results. It does not discuss rate limits or permission requirements, but for a read-only list operation, the disclosure is reasonably sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured. It leads with a single-sentence purpose, then uses an Args block for parameters, and adds a brief critical note about probability interpretation. Every sentence earns its place; no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description does not need to explain return values. It covers the tool's purpose, parameters, and the interpretation of the price field. For a list operation, this is complete. The only minor omission is explicit discourse on alternatives, but that is not required for completeness here.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only titles and defaults with no descriptions (0% coverage). The description fully compensates by explaining each parameter: limit (max 100), order (valid options), and tag (optional category slug with examples). This adds essential 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 opens with 'List the most active Polymarket prediction markets', which clearly specifies the verb (list), resource (Polymarket prediction markets), and scope (most active). This differentiates it from sibling tools like prediction_search (which searches) and prediction_market_detail (which retrieves details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when to use this tool: to list the most active prediction markets. It provides parameter details (limit, order, tag) that help tailor the list. However, it does not explicitly mention alternatives or exclude cases (e.g., when searching for a specific market), so it misses the top score for explicit when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prediction_price_historyA
Get the probability history for one market outcome.
Args: token_id: Outcome token id from prediction_market_detail. interval: Window to cover — "1h", "6h", "1d", "1w", "1m" or "max". fidelity: Bucket size in minutes. Larger values return fewer points.
Use this to see whether the market's view has been drifting or is reacting to something recent.
| Name | Required | Description | Default |
|---|---|---|---|
| fidelity | No | ||
| interval | No | 1w | |
| token_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 transparency burden. It discloses that larger fidelity values return fewer points and that token_id comes from prediction_market_detail, giving meaningful behavioral context. As a read-only history query, it is sufficiently transparent and contains no contradictions.
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 written with the purpose statement first, followed by parameter explanations and a practical usage note. Every sentence contributes meaning, with no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read tool with only three parameters and an output schema present, the description covers purpose, all parameters, and use case. It is fully sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter: token_id's origin, interval's allowed values, and fidelity's effect on bucket size. This is essential added value 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 clearly states the tool's purpose with a specific verb and resource: 'Get the probability history for one market outcome.' This distinguishes it from sibling tools like get_price/get_prices (which likely provide current prices) and prediction_market_detail (which likely provides a snapshot).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: 'Use this to see whether the market's view has been drifting or is reacting to something recent.' This tells the agent when to invoke the tool, though it does not explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prediction_searchA
Search active prediction markets by keyword.
Args: query: Keywords, e.g. "fed rate", "bitcoin 100k", "election". limit: Matches to return.
Matches in the market question rank above matches that only appear in the description. Polymarket has no server-side text search, so this scans the most active markets rather than every market ever created.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | 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 reveals the tool only scans the most active markets, not all markets, and that matches in the question rank higher. This gives agents a realistic view of result completeness and ordering without overpromising.
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 efficiently structured: a one-sentence purpose, then an Args block, then two high-value behavioral notes. Every sentence adds information, and the content is front-loaded with the action. It is slightly longer than ideal but avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool's complexity is low (2 params) and an output schema exists. The description covers purpose, parameter semantics, ranking, and data scope limitations. It doesn't explain what 'active' or 'most active' means, but that's a minor gap given the output schema likely reveals results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It defines query with examples ('fed rate', 'bitcoin 100k') and limit as 'Matches to return', adding meaning beyond the schema. However, it omits details like default/max limit or case sensitivity, which the schema partially covers via default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool searches active prediction markets by keyword, with a specific verb and resource. It distinguishes from sibling tools like prediction_markets (listing) and search_symbol by focusing on keyword search over prediction markets. The examples clarify the intended use.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context that Polymarket lacks server-side search, so this tool scans the most active markets, setting expectations for coverage. It explains ranking behavior (question matches above description) but does not explicitly name alternatives or when-not-to-use. This is clear context without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_symbolA
Find the ticker for a company or asset by name.
Args: query: Company or asset name, e.g. "bank central asia" or "nvidia". limit: Maximum matches to return.
Use this first whenever the user names a company rather than a ticker.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | 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. It discloses that the search may return multiple matches through the 'limit' parameter, but it does not describe the output structure or error behavior. However, an output schema exists, which reduces the need for return-value detail. Slight gap remains regarding result format and potential edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: a one-sentence purpose, a brief Args section, and a final usage directive. Every sentence adds value, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 2-parameter search tool with an output schema, the description covers all essential aspects: purpose, parameter meaning, and when to use it. The context signals show no nested objects and an output schema, so return-value details are already available. The description is sufficient for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description fully explains both parameters: 'query' with examples ('bank central asia', 'nvidia') and 'limit' as 'Maximum matches to return.' This adds clear meaning beyond the raw schema and provides practical usage context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Find the ticker for a company or asset by name.' It uses a specific verb ('Find') and resource ('ticker'), and differentiates from siblings by noting it should be used first when a user provides a company name rather than a ticker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit guidance is provided: 'Use this first whenever the user names a company rather than a ticker.' This tells the agent when to invoke this tool and implicitly when to skip it, contrasting with sibling tools that likely require a ticker.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stock_screenerA
Screen a stock universe on today's move.
Args: universe: "idx" (~277 Indonesian tickers) or "us" (~117 US tickers). min_change_pct: Keep only names up at least this much today. max_change_pct: Keep only names below this change today. min_price: Minimum share price, in the listing currency (IDR for IDX). max_symbols: How many tickers to quote. The universe files are ordered by liquidity, so the first N are the tradeable ones. limit: Rows to return.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| universe | No | idx | |
| min_price | No | ||
| max_symbols | No | ||
| max_change_pct | No | ||
| min_change_pct | 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. It adds valuable context beyond the schema, such as the liquidity ordering of universe files ('first N are the tradeable ones') and the currency clarification for min_price ('IDR for IDX'). It does not explicitly state that the operation is read-only, but this is implied by the screener nature, and the description does not mislead.
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 tight docstring with a single introductory sentence followed by a structured Args list. Every line adds value, and the formatting is easy to scan. There is no fluff or repetition of schema details. It is concise without sacrificing clarity.
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 moderate complexity (6 optional params, no enums, output schema exists), the description covers all core aspects: purpose, parameter semantics, and a subtle insight about universe ordering. It does not discuss edge cases (e.g., both min and max set, invalid universe) or error behavior, but for a simple screener and with an output schema present, it is nearly complete. Minor gaps prevent a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero descriptions, so the description's parameter explanations are essential and richly informative. Each parameter is explained with concrete details: universe's allowed values and ticker counts, min/max change semantics, min_price's currency caveat, max_symbols' liquidity logic, and limit's row-count purpose. This goes far 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 'Screen' plus a clear resource ('a stock universe') and scope ('on today's move'). This clearly distinguishes it from sibling tools like crypto_screener (different asset class) and technical_scan (different methodology). The purpose is unambiguous and immediately actionable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (when you need to screen stocks by price/change criteria) but provides no explicit guidance on when not to use it or what alternatives to consider. There is no mention of sibling tools like market_snapshot or technical_scan, leaving the agent to infer the appropriate context. This is adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
technical_analysisA
Run a full technical analysis on one instrument.
Args: symbol: Ticker (BTC, AAPL, BBCA). market: "crypto", "stock" or "idx". interval: 15m, 30m, 1h, 4h (crypto only), 1d or 1w. bars: How many candles to analyse. More bars means slower indicators like the 200-EMA actually warm up.
Returns RSI, MACD, Bollinger, EMA20/50/200, ATR, ADX, Supertrend and Stochastic, plus support/resistance and a composite rating. The rating lists every individual vote, so you can explain why rather than just quoting a label.
| Name | Required | Description | Default |
|---|---|---|---|
| bars | No | ||
| market | No | stock | |
| symbol | Yes | ||
| interval | No | 1d |
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 adds valuable context beyond the schema: bars affect indicator warm-up ('More bars means slower indicators like the 200-EMA actually warm up'), and the rating exposes every individual vote so users can 'explain why' rather than just trust a label. This meaningfully sets expectations for how the tool behaves and what to do with the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro, an Args list, and a Returns section. Every sentence contributes meaning; there is no fluff or repetition of schema data. The use of line breaks and bold-like labels ('Args:', 'Returns:') makes it scannable, and the length is appropriate for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is moderately complex with 4 parameters and a composite rating, and the description covers the input semantics, output contents, and a key behavioral nuance (warm-up). An output schema exists, so the description does not need to enumerate exact return structures, but it adds the explanatory value of why the rating is transparent. The description is complete enough for an agent to select and use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the sole source of parameter meaning. It explains every parameter: symbol with examples, market with allowed values, interval with options including the crypto-only 4h caveat, and bars with its impact on indicator warm-up. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Run a full technical analysis on one instrument.' It clearly distinguishes itself from siblings like get_price or technical_scan by emphasizing 'full' analysis on a single instrument, and the Returns section further clarifies its unique composite scoring functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through 'full technical analysis on one instrument' and the param constraints, but it never explicitly states when to prefer this tool over siblings like multi_timeframe_analysis or technical_scan, nor does it mention when not to use it. Clear context is present, but no exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
technical_scanA
Scan a universe for a technical setup, not just a price move.
Args: signal: One of oversold, overbought, bullish, bearish, uptrend, downtrend, volume_spike, squeeze. market: "crypto" scans the most liquid Binance pairs; "stock"/"idx" scan the bundled ticker universes. universe: For stock/idx markets: "idx" or "us". interval: Candle size for the indicators. max_symbols: Symbols to examine (capped at 60 — each one costs a full candle download). limit: Rows to return.
Slower than the price screeners because it downloads candles per symbol;
prefer a tighter max_symbols when you only need ideas, not coverage.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| market | No | crypto | |
| signal | Yes | ||
| interval | No | 1d | |
| universe | No | idx | |
| max_symbols | 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 full behavioral burden. It discloses that the tool downloads a full candle per symbol, caps max_symbols at 60, and is slower than price screeners. This provides concrete cost and constraint awareness, but it does not explicitly state read-only semantics, which is largely implied by 'scan.'
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 as a docstring with an Args section, front-loaded with the core purpose. Each parameter is explained succinctly, and the final performance note adds value without redundancy. No sentence is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, return values need not be described. The description covers all six parameters, provides usage guidance, and explains performance trade-offs. It is sufficiently complete for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate, and it does: signal lists all allowed values, market/universe explain their options, max_symbols notes the cap and cost, and limit is defined as rows returned. However, interval is only described as 'Candle size for the indicators' without listing valid values (e.g., 1h, 1d), which is a minor gap.
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 'Scan a universe for a technical setup, not just a price move,' which clearly identifies a specific verb (scan) and resource (universe). The phrase 'not just a price move' differentiates it from price-focused screeners, and the overall wording distinguishes it from siblings like technical_analysis and market_snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly contrasts with price screeners ('Slower than the price screeners...') and advises using a tighter max_symbols when only ideas are needed. This gives clear when-to-use and performance context, though it does not name alternative tools like stock_screener or technical_analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
walk_forward_backtestA
Validate a strategy out-of-sample and check whether it is curve-fitted.
Args: symbol: Ticker. strategy: Strategy name from list_strategies. market: "crypto", "stock" or "idx". interval: Candle size. bars: Candles to use. Needs roughly 40 x (folds + 1) minimum. folds: Number of out-of-sample test windows (2-10). objective: Metric the parameter search optimises for. fee_bps: Fee in basis points per position change. slippage_bps: Slippage in basis points per position change.
Optimises parameters on data up to each fold, then scores the fold that
follows on bars the optimiser never saw. The verdict compares in- and
out-of-sample results: this is the tool that catches a strategy that only
looks good in hindsight.
| Name | Required | Description | Default |
|---|---|---|---|
| bars | No | ||
| folds | No | ||
| market | No | crypto | |
| symbol | Yes | ||
| fee_bps | No | ||
| interval | No | 1d | |
| strategy | Yes | ||
| objective | No | sharpe | |
| slippage_bps | 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 fully explains the behavioral process: 'Optimises parameters on data up to each fold, then scores the fold that follows on bars the optimiser never saw' and describes the verdict comparison. This discloses the methodology and the tool's role in detecting overfitting, going well beyond a simple action statement.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a front-loaded purpose, an organized Args list, and a concise process explanation. Every sentence adds value; no redundant or filler content 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?
Despite having 9 parameters and an output schema, the description provides a complete picture: it explains the tool's purpose, the walk-forward mechanism, the meaning of each parameter, and how the verdict works. The presence of an output schema means return values need not be detailed, and the description fills all other context gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by explaining every parameter in the Args list. It adds meaningful constraints (e.g., 'bars: Needs roughly 40 x (folds + 1) minimum') and clarifies the source for strategy ('Strategy name from list_strategies'), which is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific purpose: 'Validate a strategy out-of-sample and check whether it is curve-fitted.' This is a specific verb+resource phrase that distinguishes it from regular backtesting (e.g., backtest_strategy) and other sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by emphasizing out-of-sample validation and curve-fit detection ('this is the tool that catches a strategy that only looks good in hindsight'). However, it does not explicitly name alternative tools or state when not to use it, so it falls just short of full explicit 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. Dates show when Glama detected each change.
20 tool updates
v0.1.0- First observed
backtest_strategy - First observed
candlestick_patterns - First observed
compare_strategies - First observed
crypto_screener - First observed
crypto_top_movers - First observed
get_price - First observed
get_prices - First observed
list_strategies - First observed
list_universes - First observed
market_snapshot - First observed
multi_timeframe_analysis - First observed
prediction_market_detail - First observed
prediction_markets - First observed
prediction_price_history - First observed
prediction_search - First observed
search_symbol - First observed
stock_screener - First observed
technical_analysis - First observed
technical_scan - First observed
walk_forward_backtest
TDQS
Scored across 20 tools
Each tool targets a distinct purpose: price fetching, technical analysis, screening, prediction markets, and backtesting are clearly separated. Even within similar areas like screeners, descriptions clarify the difference (e.g., price-based vs. technical-setup scans). No two tools are interchangeable.
All names use snake_case and are descriptive, with a consistent pattern within subdomains (e.g., prediction_* prefix, get_* for price retrieval, *_screener for screeners). The mix of verb-first (list_strategies) and noun-first (technical_analysis) is a minor deviation but not confusing.
At 20 tools, this is on the heavy side, but the breadth of the domain (market data, technical analysis, screeners, prediction markets, backtesting) justifies many of them. Still, the count approaches the 'too many' threshold, and some redundancy like get_price vs. get_prices adds to the load.
The toolset covers a wide lifecycle: fetching prices, searching symbols, running analysis, screening, prediction market exploration, and backtesting with validation. The main gap is the lack of a direct historical OHLCV endpoint for raw price data, which would be useful for charting or custom analysis.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server with quote and live cryptocurrency price tools, local and cloud-deployed transports.
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Live prices, perps, prediction markets and a paper trading desk over one MCP.
MCP server for Mudrex futures trading enabling AI agents to securely access data and risk tools.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceReal-time financial market data MCP server. Stocks, crypto, technicals, sentiment, FDA calendar. No API keys required.-
- AlicenseCqualityBmaintenanceMCP server that provides a unified prediction market API for multiple venues like Polymarket and Kalshi, allowing AI agents to discover markets, fetch order books, and execute trades through a single interface.32368MIT
- AlicenseCqualityDmaintenanceAn MCP server providing stock market data and trading capabilities through multiple broker APIs including Robinhood and Schwab.1009Apache 2.0
- FlicenseAqualityBmaintenanceAn advanced MCP server for real-time worldwide stock market data, technical indicators, financials, news, and Python sandboxing with AI models, supporting US and Indian markets.291-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kumaraprayoga68-sketch/market-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server