polymarket-paper-trader
This MCP server is a zero-risk paper-trading gym for Polymarket (and read-only Kalshi) prediction markets — it lets an AI agent manage a simulated cash account, trade live order books with real fees and fills, track performance, and generate shareable/leaderboard content.
Account management —
init_account(create/reset with starting balance),get_balance(cash, reserved/available cash, positions value, P&L),reset_account(wipe trades, positions, balance).Market discovery —
search_markets(keyword),list_markets(sorted by volume/liquidity),get_market(details by slug or condition ID),get_event(grouped related markets),get_tagsandget_markets_by_tag(category filtering).Market data —
get_order_book(live bids/asks for an outcome) andwatch_prices(live midpoints across multiple markets).Kalshi data (read-only) —
kalshi_markets(filter by status, series, event),kalshi_market(one ticker),kalshi_book(live YES book); trading stays on Polymarket.Trading —
buyandsellat best available prices (FOK or FAK order types), plusplace_limit_order(GTC/GTD with beili_price and expiry).Order management —
list_orders,cancel_order,cancel_all_orders, andcheck_ordersto fill pending limit orders against live prices.Portfolio & history —
portfolio(open positions with live valuations and unrealized P&L) andhistory(recent trade log with execution details).Performance analytics —
stats(win rate, ROI, profit, max drawdown) andstats_card(shareable card in tweet/markdown/plain format).Resolution —
resolvea closed market (winners pay $1/share) orresolve_allfor every closed position.Social / competition —
share_content(platform-specific posts for twitter/telegram/discord/plain),leaderboard_entry(verifiable JSON ranking data),leaderboard_card(Top 10 local accounts),pk_card(head-to-head comparison), andpk_battle(run two strategies head-to-head, stdio only).Backtesting —
backtesta strategy against historical CSV/JSON price data with synthetic spread/depth (stdio only).
Integrates with the Polymarket prediction market platform, enabling agents to browse live markets, view order books, and simulate trades against real market data with official fee and fill mechanics.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@polymarket-paper-traderSearch for bitcoin prediction markets and show top 5 by liquidity."
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.
polymarket-paper-trader
A zero-risk gym for AI agents on real prediction markets — real order books, official fees, verified fill fidelity. Practice, evaluate, and benchmark decision intelligence.
Agents make probability judgments all day. Polymarket is the world's largest prediction market, and its order books are the honest scoreboard: real money, real prices, real outcomes. But you cannot hand an agent a wallet to learn with. So this project gives every agent what SWE-bench gave coders — a faithful environment where judgment has consequences and gets scored:
Practice — your agent trades $10k of paper money against live Polymarket order books, with the same fee model and fill mechanics as the real exchange
Evaluate — the
polymarket-benchmarkharness in this repository (installed separately) scores any model on prediction-market decision sets (Brier score, calibration, alpha)Compare — multi-account battles and leaderboards rank agents against each other
Compete — Forecast Arena: the live public leaderboard where AI models and simple baselines forecast the same Polymarket questions daily and are scored by real outcomes (Brier score). Runs from this repo (enter your model · workflow · raw data).
Part of agent-next — building an agentic world.
60-second demo
pip install polymarket-paper-trader
pm-trader init --balance 10000 # $10k paper money
pm-trader markets search "bitcoin" # find markets
pm-trader buy will-bitcoin-hit-100k yes 500 # buy $500 of YES
pm-trader stats --card # shareable stats cardPrefer not to install? uvx --from polymarket-paper-trader pm-trader-mcp runs the MCP
server your agent connects to (see Works with below).
That's it. Your AI agent is now trading Polymarket with zero risk.
Related MCP server: Polymarket MCP Server
Install
# via pip (CLI + MCP server)
pip install polymarket-paper-trader
# or the MCP server alone, with no install
uvx --from polymarket-paper-trader pm-trader-mcp
# from source (development)
uv pip install -e ".[dev]"Requires Python 3.10+.
Works with
Runtime | One-line install |
Claude Code |
|
Codex CLI |
|
Cursor |
|
Gemini CLI |
|
OpenCode / Goose / Cline / Windsurf / Copilot | add |
OpenClaw / ClawHub |
|
Hermes Agent / LangChain / OpenAI Agents SDK / CrewAI | wrap |
ChatGPT / Claude.ai (remote MCP) | add the remote |
Full copy-paste config for every runtime above (plus Grok/xAI remote MCP): docs/integrations.md.
Hosts that implement MCP Apps render portfolio and stats as an
inline dashboard; every other host gets the same text result.
Use it from ChatGPT / Claude.ai / personal agents
Remote mode exists for hosts that only speak HTTP: run
pm-trader-mcp --transport streamable-http with the opt-in --auth-issuer,
--auth-audience and --resource-url flags, then add your server's /mcp
URL in the host's remote-MCP settings. It is off by default, and it needs an
OAuth/OIDC issuer you operate — pm-trader verifies bearer tokens against it
and gives every verified subject its own paper accounts. There is no hosted
endpoint to add: you run the server yourself. Setup, threat model and the
environment equivalents: docs/remote-mcp.md.
Quick start
# Initialize with $10k paper balance
pm-trader init --balance 10000
# Browse markets
pm-trader markets list --sort liquidity
pm-trader markets search "bitcoin"
# Trade
pm-trader buy will-bitcoin-hit-100k yes 100 # buy $100 of YES
pm-trader sell will-bitcoin-hit-100k yes 50 # sell 50 shares
# Check portfolio and P&L
pm-trader portfolio
pm-trader statsHow it works — and why to trust it
Your order walks the real book. A buy consumes live ask levels from the lowest price upward, exactly like a real taker order — slippage is real and reported in basis points
Fees follow the official per-match curve —
fee = C × rate × p × (1-p), rounded to 5 decimals, makers exempt (exact spec in the CHANGELOG) — charged per filled level from each market's published fee schedule, not an approximationPaper cash, real discipline. Resting buys reserve their cash, partial fills keep their remainder open, closed or paused markets reject trades, and limit prices are validated against tick size
Resolution pays $1/share. Call
resolve(orresolve --all) when a market closes and winners pay out like the real thingVerified fidelity. The live test suite asserts that simulated fills land inside the band of prices the market actually quoted (Data API v2 price history) and that fees match the official curve exactly — run against real APIs on CI
Upstream-aligned. The client tracks the current Gamma / CLOB / Data API surface, contract-verified by live probes
Multi-outcome markets — any number of outcomes, not just YES/NO
Kalshi too. Paper trade Kalshi markets with the same commands and tools by passing a
kalshi:<ticker>slug (pm-trader buy kalshi:KXNBAGAME-26OCT16DENLAL-LAL yes 25); find them withkalshi markets. Fees follow each series' published curve (docs/kalshi.md)100% coverage gate on the core package, plus end-to-end tests against the live API
CLI commands
Command | Description |
| Create paper trading account |
| Show cash, reserved/available cash, positions value, total P&L |
| Wipe all data |
| Browse active markets |
| Full-text market search |
| Market details |
| List all market categories/tags |
| Event details — a group of related markets |
| YES/NO midpoints and spread |
| Order book snapshot |
| Monitor live prices |
| Buy at market price |
| Sell at market price |
| Open positions with live prices |
| Trade history |
| Kalshi markets (read-only) |
| One Kalshi market (read-only) |
| Kalshi YES order book (read-only) |
| Limit order (GTC/GTD) |
| Open limit orders (pending and partially filled) |
| Cancel a limit order |
| Cancel all pending limit orders at once |
| Fill limit orders if price crosses |
| Win rate, ROI, profit, max drawdown |
| Resolve a closed market, or all closed markets (winners get $1/share) |
| Local account rankings |
| Battle: who's the better trader? |
| Export trade history |
| Export positions |
| Run a trading strategy |
| Compare account performance |
| Battle: who's the better trader? |
| Alias of |
| Alias of |
| Alias of |
| List named accounts |
| Create account for A/B testing |
| Delete a named account and all its data |
| Start MCP server (stdio transport) |
Global flags: --data-dir PATH, --account NAME (or env vars PM_TRADER_DATA_DIR, PM_TRADER_ACCOUNT).
MCP server — what your agent can do
Your agent gets the following tools via the Model Context Protocol.
The server also carries the full trading playbook with it — as MCP server
instructions, as a trading_playbook prompt, and as a skill://trading-playbook
resource — so MCP-only clients (Cursor, Claude.ai connectors, Grok API remote
MCP, ChatGPT apps) get the same guidance skill-aware agents get from
skill/polymarket-paper-trader/SKILL.md.
pm-trader-mcp # starts on stdio
# or, with no local install:
uvx --from polymarket-paper-trader pm-trader-mcpAdd to your Claude Code config:
{
"mcpServers": {
"polymarket-paper-trader": {
"command": "pm-trader-mcp"
}
}
}Remote transport (streamable-http)
For MCP clients that only speak HTTP, run the server with --transport streamable-http:
pm-trader-mcp --transport streamable-http --host 127.0.0.1 --port 8000
# or: pm-trader mcp --transport streamable-http --host 127.0.0.1 --port 8000The MCP endpoint is then http://<host>:<port>/mcp. There is no isolation
between callers — everyone who reaches the server shares all of its paper
accounts; it is self-host-only, not a public multi-user service. There is no authentication on this transport;
anyone who can reach the port can call every exposed tool. backtest and
pk_battle (local file reads + local strategy-module execution) are
stdio-only and are not registered when serving over streamable-http.
Docker
docker build -t pm-trader-mcp .
docker run -p 127.0.0.1:8000:8000 -v pm-trader-data:/root/.pm-trader pm-trader-mcpPublish the port to 127.0.0.1 only (as above) unless you put a real
authenticating proxy in front of it — the container has no auth of its own.
MCP tools
Tool | What it does |
| Create paper account with starting balance |
| Cash, reserved/available cash, positions value, total P&L |
| Wipe all data and start fresh |
| Find markets by keyword |
| Browse markets sorted by volume/liquidity |
| All market categories/tags for filtering |
| Markets in a specific category/tag |
| Event details — a group of related markets |
| Market details with outcomes and prices |
| Live order book snapshot (bids + asks) |
| Kalshi markets, read-only (open/closed/settled, by series or event) |
| One Kalshi market by ticker, read-only |
| Live Kalshi YES order book, read-only |
| Monitor prices for multiple markets |
| Buy shares at best available prices |
| Sell shares at best available prices |
| Open positions with live valuations and P&L |
| Recent trade log with execution details |
| Limit order — stays open until filled or cancelled/expired |
| Pending limit orders |
| Cancel a pending order |
| Cancel all pending limit orders at once |
| Execute pending orders against live prices |
| Win rate, ROI, profit, max drawdown |
| Resolve a closed market (winners get $1/share) |
| Resolve all closed markets |
| Backtest a strategy against historical snapshots (stdio only) |
| Shareable stats card (tweet/markdown/plain) |
| Platform-specific content (twitter/telegram/discord) |
| Generate verifiable leaderboard submission |
| Top 10 ranking card from all local accounts |
| Head-to-head comparison between two accounts |
| Run two strategies head-to-head, auto-compare (stdio only) |
Strategy examples
Three ready-to-use strategies in examples/:
Momentum (examples/momentum.py)
Buys when YES price crosses above 0.55, takes profit at 0.70, stops loss at 0.35.
pm-trader strategy run examples.momentum.runMean reversion (examples/mean_reversion.py)
Buys when YES price drops 12+ cents below 0.50 fair value, sells when it reverts.
pm-trader strategy run examples.mean_reversion.runLimit grid (examples/limit_grid.py)
Places a grid of limit buy orders below current price with take-profit sells above.
pm-trader strategy run examples.limit_grid.runJev edge (examples/jev_edge.py)
"Jev vs the market": asks Jev for a YES probability per binary market and buys the side it favors, skipping markets priced outside [0.05, 0.95] where fees dominate — pm-trader strategy run examples.jev_edge.run (needs pip install -e "benchmark").
Writing your own strategy
Strategies are imported from the examples. package (the allowlist lives in pm_trader/benchmark.py), so drop your file there:
# examples/my_strategy.py
from pm_trader.engine import Engine
def run(engine: Engine) -> None:
"""Your strategy receives a fully initialized Engine."""
markets = engine.api.search_markets("crypto")
for market in markets:
if market.closed or market.yes_price < 0.3:
continue
engine.buy(market.slug, "yes", 100.0)pm-trader strategy run examples.my_strategy.runFor backtesting with historical data:
def backtest_strategy(engine, snapshot, prices):
"""Called once per historical price snapshot."""
if snapshot.midpoint > 0.6:
engine.buy(snapshot.market_slug, snapshot.outcome, 50.0)Evaluate your agent: polymarket-benchmark
The paper trader is the gym; the polymarket-benchmark package in this repository is the scoreboard. It is a separate install (not part of the pm-trader CLI — pm-trader strategy replays trading strategies (pm-trader benchmark remains as an alias), see the CLI table above):
pip install -e "benchmark[dev]"
cd benchmark && polymarket-benchmark run --model opencode/jev-1.13-free --market-set miniRun two models head-to-head to see whose judgment is actually better. Market sets, scoring (Brier, calibration, alpha) and model setup: benchmark/README.md.
Multi-account support
Run parallel strategies with isolated accounts:
pm-trader --account aggressive init --balance 5000
pm-trader --account conservative init --balance 5000
pm-trader --account aggressive buy some-market yes 500
pm-trader --account conservative buy some-market yes 100
pm-trader strategy compare aggressive conservativeShare your results
Generate a shareable stats card and post to X/Twitter:
pm-trader stats --tweet # X/Twitter optimized
pm-trader stats --card # markdown for Telegram/Discord
pm-trader stats --plain # plain textAI agents can use the stats_card MCP tool to generate and share cards automatically.
Honest limits
Paper only. No wallet, no keys, no real trades, no real money — ever. Resolution payouts are simulated $1/share
Simulation quality is verified against live order books and price history, but real execution adds queue position, latency, and counterparty behavior no simulator can promise
Live market data needs network access to Polymarket's public APIs (no key required)
OpenClaw / ClawHub
Available on ClawHub as polymarket-paper-trader:
npx clawhub install polymarket-paper-traderGitHub bot
Comment /oc or /opencode on an issue or PR. New issues get a triage reply; non-draft PRs get a shallow review. Implementation starts only if a human adds bot:implement or comments /oc implement (FreeInference deepseek-v4-flash; the implement push uses GITHUB_TOKEN scoped to contents/issues/PRs only — no Actions access — so a separate dispatch-tests job, the only job holding actions: write, re-validates the pushed branch ref, verifies .github/workflows/test.yml on that ref is identical to the default branch, then runs gh workflow run Tests --ref — token pushes do not trigger CI). Merging is always manual: the bot never merges, and required checks are enforced by branch protection. Q&A / triage / review stay on qwen3.6-35b. No wallet, no real trades. Sessions are not shared.
Also in this repository
The paper-trader is the product; three companion packages live alongside it.
Package | Directory | What it is |
| LLM evaluation harness — see Evaluate your agent | |
| Client SDK for a compatible leaderboard server: register an agent, trade, read portfolio and stats. | |
| FastAPI leaderboard service for agents — accounts, trading, rankings, and a small website |
See CONTRIBUTING.md for how to work on each package and CHANGELOG.md for release history.
Tests
pytest -m "not live" # unit + integration, 100% coverage gate
pytest # full suite (requires network)
pytest tests/test_e2e_live.py # live API integration tests onlyLicense
MIT
Available Tools
33 toolsbacktestRun backtestB
Run a backtest with historical price data.
data_path: path to CSV or JSON file with historical prices strategy_path: dotted Python path to strategy function (e.g. "mymod.my_strategy") balance: starting balance (USD) spread: synthetic order book spread depth: synthetic order book depth per level
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| spread | No | ||
| balance | No | ||
| data_path | Yes | ||
| strategy_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false, idempotentHint=false and openWorldHint=true, which raises the question of whether a backtest mutates account state or fires real orders; the description is silent on this. It also says nothing about runtime, whether results persist, or whether it needs a live market connection. With non-trivial annotations present, the description adds no behavioral context to disambiguate them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One-line purpose followed by a compact per-parameter glossary, with the two required paths listed first. Nothing is padded, though the parameter block is a flat list rather than front-loading the required inputs explicitly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. However, for a five-parameter simulation tool whose annotations flag non-read-only, non-idempotent behavior, the description should at minimum say whether account or order state is affected. That gap keeps it at minimum-viable rather than 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 carries the full burden and largely does: it gives the accepted file formats for data_path, shows a dotted-path example for strategy_path, and identifies balance as USD. The gaps are the units/meaning of spread and depth (it calls them 'synthetic order book' values but gives no scale or defaults) which the schema's bare types do not fill in.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: run a backtest against historical price data. The purpose is unmistakable and no sibling tool overlaps with it. It stops short of saying what the backtest yields or how it relates to the live trading tools (buy/sell/place_limit_order), so it lacks sibling differentiation beyond the obvious name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all. The description never says whether this simulates trades without touching the account or whether it is a prerequisite for anything, and it never contrasts itself with the live-order siblings. An agent gets no routing information from the text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
buyBuy sharesA
Buy shares in a Polymarket outcome.
Spends amount_usd to buy at best available prices. order_type: "fok" (fill-or-kill) or "fak" (fill-and-kill, allows partial).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default | |
| outcome | Yes | ||
| amount_usd | Yes | ||
| order_type | No | fok | |
| slug_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=false, openWorldHint=true), so the bar is lower. The description goes beyond them by disclosing execution semantics: it buys at best available prices and explains that 'fok' is all-or-nothing while 'fak' permits partial fills. It does not mention slippage or funding requirements, but the added execution detail is genuinely useful.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines, front-loaded with the verb and resource, and each sentence carries information. Formatting is slightly awkward with mid-thought line breaks, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required. Still, for a real-money mutation that is non-idempotent, the description omits prerequisites such as account selection (the 'account' param), slug vs id format, and any balance or minimum-order constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It fully explains the order_type enum values and conceptually covers amount_usd, but leaves slug_or_id, outcome, and account entirely undefined — and 'outcome' (which side/token of the market) is a required parameter whose meaning an agent could easily get wrong.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Buy shares in a Polymarket outcome') and identifies the exchange (Polymarket). It is distinguishable from 'sell', but does not explicitly differentiate itself from 'place_limit_order', which is the closest sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied: this is a market buy that spends amount_usd at best available prices. However, there is no explicit routing guidance such as 'use place_limit_order for limit orders' or stated prerequisites (funded account, minimum size), leaving the agent to infer when to choose this over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_all_ordersCancel all limit ordersCDestructiveIdempotent
Cancel all pending limit orders at once.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered structurally. The description adds no behavioral context beyond the name — nothing about irreversibility, blast radius, whether it spans accounts, or whether it blocks new orders. For a destructive bulk operation this is thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficient, though the brevity comes at the cost of the operational detail this destructive tool needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but for a destructive bulk-cancel tool the definition omits account scoping, prerequisites, and post-cancellation behavior. An agent lacks enough context to call it safely and predictably.
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 never mentions the single 'account' parameter or its 'default' value. The phrase 'all pending limit orders' actually implies global scope without clarifying that it can be scoped by account, leaving the one parameter undocumented in both places.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (cancel) and resource (all pending limit orders) with clear scope ('at once'), which distinguishes it from the singular cancel_order sibling. However, it never names that sibling explicitly, so the differentiation is inferred rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this versus cancel_order, place_limit_order, or list_orders/check_orders, and no preconditions (e.g., auth or account state) are given. Usage is only implied by the verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_orderCancel limit orderBDestructiveIdempotent
Cancel a pending limit order by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default | |
| order_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, readOnlyHint=false and openWorldHint=false, so the safety profile is carried by structured data. The description adds one useful behavioral constraint, that only pending limit orders are cancellable, but says nothing about failure modes (order already filled, unknown ID) or the effect of cancelling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the action front-loaded and no filler. It is efficient, though the brevity is arguably part of the specification gap rather than pure economy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and annotations cover the safety profile. Still, for a destructive mutation with one fully undocumented parameter and no stated precondition failures, the description leaves real gaps an agent would want filled.
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 bears the full burden. 'By ID' loosely maps to order_id, but the 'account' parameter (default 'default') is explained nowhere, and neither parameter's format or constraints are clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Cancel a pending limit order') and the qualifier 'pending limit' narrows scope enough to separate it from cancel_all_orders. It stops short of explicitly naming that sibling, so an agent must infer the division of labor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance and never mentions cancel_all_orders, which is the obvious alternative for bulk cancellation. The only usable signal is the implicit 'pending limit order' scope, which the agent must decode on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ordersCheck limit ordersB
Check all pending limit orders against live prices and execute fills.
Call this periodically to trigger limit order evaluation.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=false, and openWorldHint=true, so the agent knows this mutates state and depends on external market data. The description adds the mechanism (pending orders matched against live prices become fills) and implies repeat-call safety, but says nothing about authentication, rate limits, or what happens to partially filled or rejected orders.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action before the invocation guidance. The second sentence partially restates the first, but it adds the periodicity cue, so it roughly earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. Given the tool mutates state and takes an undocumented scoping parameter, the description is complete enough to invoke safely but leaves the account-scoping and failure-mode questions unanswered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter "account" has 0% schema description coverage (only a "default" value), so the description is the only place its meaning could be established — and it never mentions the parameter. It does not say whether omitting it defaults to the "default" account or whether evaluation can be scoped to one account.
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 gives a specific verb+resource: it checks pending limit orders against live prices and executes fills. That is clearly distinct from sibling tools like place_limit_order, list_orders, and cancel_order, even though those siblings are never named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Call this periodically to trigger limit order evaluation" gives explicit invocation context (a polling/cadence trigger), which is genuinely useful for an agent deciding when to call it. However, it offers no exclusions or alternatives (e.g., whether to call per-account or whether it is safe to call after cancel_all_orders).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_balanceGet account balanceBRead-onlyIdempotent
Get current account balance (cash, reserved/available cash), positions value, and P&L.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds some value by breaking down the payload (reserved vs available cash, P&L) but says nothing about freshness, pagination, or whether positions are included by default.
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?
One sentence, front-loaded with the core action and no filler. It could be slightly tighter since part of the content list duplicates what the output schema already exposes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return structure need not be explained, and the operation is a simple read with no required parameters. However, the definition omits any routing guidance among the many sibling read tools and leaves the sole parameter undocumented.
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 single 'account' parameter with its 'default' value is never mentioned in the description. The word 'account balance' hints at account scoping but does not explain what values are accepted or what 'default' resolves to.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get current account balance') and enumerates the returned content (cash, reserved/available cash, positions value, P&L). It does not distinguish itself from plausible siblings like 'portfolio' or 'history', which may also surface balance-like 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?
There is no guidance on when to call this versus alternatives such as portfolio, history, or stats, and no mention of prerequisites. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet eventBRead-onlyIdempotent
Get event details — a group of related markets.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is fully covered. The description adds only the conceptual definition of an event; it says nothing about pagination, nesting of child markets, or lookup failures, so it does not meaningfully exceed the annotation baseline.
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?
One compact sentence with the purpose front-loaded and the clarifying appositive kept short. Nothing is wasted, though it omits any routing or parameter detail that would make the sentence more load-bearing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-shape explanation is not needed, and annotations cover the safety semantics. The remaining gap is the undocumented required slug argument and the absence of any routing hint among many market-related siblings, leaving the definition merely adequate for a simple read 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% and the single required parameter 'slug' is undocumented in both schema and description. The description never explains that the slug identifies the event (vs. a market slug), nor gives format examples, so it fails to compensate for the coverage 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?
Specific verb+resource ('Get event details') with a useful gloss ('a group of related markets') that defines the domain object and implicitly distinguishes it from the sibling get_market, which returns a single market. It does not explicitly name get_market as the alternative, so it falls short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus get_market, list_markets, search_markets, or get_markets_by_tag, and no prerequisites stated. The description only says what the tool does, leaving tool selection entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_marketGet marketARead-onlyIdempotent
Get detailed info for a specific market by slug or condition ID.
| Name | Required | Description | Default |
|---|---|---|---|
| slug_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint, fully covering the safety profile for this lookup. The description adds nothing beyond that annotation set – no note on what happens with an unknown slug, whether a condition ID behaves differently, or the cost/freshness of the call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact sentence, front-loaded with the verb and resource and ending with the discriminator for the input. Zero 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 one-parameter, read-only getter with a declared output schema, the description need not explain return values or pagination. It is close to complete; the only shortfall is not positioning itself against the related market/event retrieval tools in a crowded sibling list.
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 sole property is merely titled 'Slug Or Id', so the description carries real weight by explicitly stating the accepted value types ('by slug or condition ID'). It compensates for the bare schema, though it gives no format nuance (e.g., hex ID vs. slug shape).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed info for a specific market') plus the lookup key (slug or condition ID). This implicitly separates it from list_markets and search_markets, which return sets rather than a single market, though it never names those siblings or get_event as an alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent infers this is the tool for fetching one market once it already has a slug or condition ID. There is no explicit when-to-use/when-not guidance and no mention of how it differs from search_markets, list_markets, or get_event.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_markets_by_tagList markets by tagCRead-onlyIdempotent
List markets in a specific category/tag.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| tag_slug | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds nothing beyond the name: no pagination behavior, no note on ordering or what happens with an unknown tag slug, so it contributes no extra behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with no filler, which is good, but the brevity reflects under-specification rather than tight information density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be explained, but with zero schema description coverage the definition leaves the required tag_slug format and the limit semantics undocumented. For a tool in a crowded market-listing family, this is too thin to route the agent confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate and does not. It alludes to the tag concept but never documents the tag_slug format, whether it must match get_tags output, or what the limit parameter controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource (list markets) scoped by category/tag, which distinguishes it from the unfiltered list_markets. It does not explicitly name search_markets or get_market as alternatives, so sibling differentiation is implied rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus search_markets, list_markets, or get_tags. The agent must infer from the name alone that this is the tag-filtered listing path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_order_bookGet order bookBRead-onlyIdempotent
Get the live order book for a market outcome (asks and bids).
| Name | Required | Description | Default |
|---|---|---|---|
| outcome | No | yes | |
| slug_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds useful context by stating the book is 'live' and contains asks and bids, but it does not discuss freshness, throttling, or whether the book can be empty.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the key noun 'order book' appears early. It is efficient, though terse relative to the gaps it leaves.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not required, and the description adequately states what the tool fetches. However, with 0% parameter coverage and no usage guidance, an agent still lacks enough information to invoke it confidently across different market identifiers.
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 neither parameter is explained: 'slug_or_id' is undocumented and the 'outcome' parameter's default of 'yes' is not mentioned. The phrase 'market outcome' hints at the outcome parameter but adds no format or allowed-value detail, so the description fails to compensate for the coverage 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?
States a specific verb and resource ('Get the live order book for a market outcome') and clarifies the content returned ('asks and bids'). It is clearly distinct from siblings like get_market or list_orders, though it does not explicitly name how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to call this tool versus alternatives such as get_market or buy/sell, and no prerequisites are given. The only inferable guidance is that it is a read operation, which comes from annotations rather than the description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tagsList market tagsARead-onlyIdempotent
Get all market categories/tags for filtering.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false and openWorldHint=true, so the safety and repeatability profile is covered. The description adds only that these are market categories used for filtering; with a rich annotation set and an output schema present, this modest addition is worth a 3.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is efficient, though the budget freed up by that brevity is not spent on any routing or scope detail, which slightly weakens it against the more verbose siblings.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter, read-only lookup with an output schema and full annotation coverage, the description supplies enough to call it correctly. The only real gap is disambiguation from get_markets_by_tag, which the agent must resolve on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there are no parameter semantics for the description to clarify. Baseline 4 applies; the description correctly implies an unfiltered, complete retrieval.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb and resource: 'Get all market categories/tags', and adds the use case ('for filtering'). It does not, however, distinguish itself from the close sibling get_markets_by_tag, which an agent might easily confuse with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for filtering' implies the intended use — retrieving the tag vocabulary so tags can be applied as filters elsewhere. There is no explicit when-to-use versus get_markets_by_tag, nor any exclusions or prerequisites, leaving routing to be inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
historyGet trade historyCRead-onlyIdempotent
Get recent trade history.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds essentially nothing beyond that — no meaning for 'recent', no pagination behavior, no indication of whose history the default account returns.
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 single sentence is front-loaded and free of padding, which is good, but its brevity comes from under-specification rather than discipline. It is appropriately sized only in the sense that there is nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation here. However, with a defaulted account parameter and an undefined recency window, the description leaves an agent unable to call the tool confidently relative to its many data-returning siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for both parameters, and the description never mentions limit or account at all. The agent must open the schema and still finds no prose explaining what values these accept or how 'account: default' resolves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get ... trade history'), which is better than a tautology, but it doesn't differentiate itself from siblings that also return trading data such as list_orders, check_orders, and portfolio. An agent cannot tell from this description which one to reach for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all — no mention of when history applies versus list_orders, check_orders, or portfolio. The word 'recent' hints at a time window but never defines it or explains how to widen it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_accountInitialize paper accountBDestructiveIdempotent
Initialize a paper trading account with starting balance (USD).
Creates a new account or resets an existing one.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default | |
| balance | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and idempotentHint=true, and the description explicitly warns it can reset an existing account – the one genuinely important behavioral fact beyond the hints. It does not detail what reset destroys (orders, history, positions), so it's not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short lines, purpose first and the destructive reset caveat second. Nothing 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?
An output schema exists so return values needn't be explained, and annotations cover safety. What's missing is the overlap with reset_account and the full consequences of the reset path. Adequate but with a clear gap for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and neither parameter has a description. The description only names the balance as USD-denominated, leaving account identity and the currency/range semantics of balance entirely undocumented. It partially compensates but far from fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a clear verb+resource: initialize/reset a paper trading account. The title and description align well. It is distinguishable from reset_account and get_balance, though it doesn't explicitly contrast with the sibling reset_account that presumably does the same thing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus reset_account, which by the description's own wording ('resets an existing one') appears to overlap. No prerequisites or typical invocation context are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_bookGet Kalshi order bookBRead-onlyIdempotent
Get the live YES order book for a Kalshi market, best levels first.
Kalshi publishes bids only; the asks are derived from the NO bids (a NO bid at p is a YES ask at 1 - p).
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds genuinely useful domain behavior beyond the annotations: Kalshi publishes bids only and asks are derived via a NO bid at p being a YES ask at 1 - p, plus best-levels-first 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 short sentences, front-loaded with the resource and scope, and the derived-asks nuance follows immediately. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values need not be described, and annotations cover the safety profile. The only meaningful gap is the undocumented depth parameter and ticker semantics.
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 carry the parameter burden and it does not mention either parameter. Neither 'ticker' (market vs event ticker) nor 'depth' (number of book levels, default 10) is explained anywhere, leaving both ambiguous for the caller.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource with scope: 'Get the live YES order book for a Kalshi market'. It is clear what the tool returns, but it never distinguishes itself from the sibling get_order_book, leaving the agent to guess whether this is the Kalshi-specific variant or a duplicate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no named alternative, despite siblings get_order_book, kalshi_market, and kalshi_markets competing for overlap. The agent gets domain context (Kalshi market) but no routing rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_marketGet Kalshi marketBRead-onlyIdempotent
Get one Kalshi market by ticker (read-only).
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The only behavioral claim ('read-only') merely restates the readOnlyHint annotation, so it adds no value beyond structured data. With annotations already covering readOnly, idempotent, destructive, and openWorld, the description contributes nothing new such as error behavior for an unknown ticker.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, placing the identifier (ticker) before the parenthetical qualifier. Nothing is redundant or padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema means return values need not be explained, and the operation is simple. Still, in a sibling set crowded with market-listing and market-fetching tools, the absence of any disambiguation makes the definition only minimally 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 carry the ticker parameter's meaning. Saying 'by ticker' does identify the key as a market identifier, which is minimal but real compensation; it gives no format or example, so it only partly fills the 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?
States a specific verb and resource ('Get one Kalshi market by ticker'), so the operation is unambiguous. However, it does nothing to distinguish itself from near-identical siblings such as get_market, kalshi_markets, and list_markets, leaving the agent to guess which one to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this over get_market, kalshi_markets, or list_markets, which overlap heavily in this sibling set. No prerequisites or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
kalshi_marketsList Kalshi marketsARead-onlyIdempotent
List Kalshi markets (read-only; trading stays on Polymarket).
status is open, closed or settled; series_ticker / event_ticker
narrow the list. Each market's slug is its Kalshi ticker.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | open | |
| event_ticker | No | ||
| series_ticker | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the 'read-only' remark is largely redundant. The useful additions are the status enumeration and the note that slug equals the Kalshi ticker, but return/pagination behavior is not addressed.
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 compact sentences, front-loaded with the scope constraint; little waste, though the format is terse enough that the ticker-filter sentence reads as a fragment.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and the read-only/list framing covers the safety side. The only shortfall is the undocumented limit parameter, minor for a low-complexity list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it does for three of four params, defining status values (open/closed/settled) and explaining that series_ticker/event_ticker narrow the list. The limit parameter is left undocumented, a small 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?
States a specific verb and resource ('List Kalshi markets') and clarifies scope with 'read-only; trading stays on Polymarket'. The singular sibling kalshi_market exists, and while the plural/singular distinction is inferable, the description never explicitly routes between them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It hints at narrowing via series_ticker/event_ticker and status, which implies when to use the filters, but gives no explicit when-to-use versus siblings like kalshi_market or get_markets_by_tag, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_cardGenerate leaderboard cardARead-onlyIdempotent
Generate a Top 10 leaderboard card from all local accounts.
Ranks all qualified accounts (10+ trades) by ROI%. If accounts is provided (comma-separated), only include those accounts. Otherwise scans every account in this session's data root (~/.pm-trader locally, the caller's own directory in remote mode).
| Name | Required | Description | Default |
|---|---|---|---|
| accounts | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld/destructive, so the bar is low, but the description adds real context: the 10+ trade qualification threshold, ROI% ranking, and where data is read from (~/.pm-trader locally vs the caller's directory in remote mode). This tells the agent what will be scanned and what qualifies.
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?
Front-loaded with the primary outcome, then the qualification rule, then the parameter condition, then the data-root detail. No filler, though the line breaks make it slightly more sprawling than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be described. Combined with the annotation coverage, threshold, ranking basis, scope, and parameter semantics, an agent has enough to invoke it correctly; only sibling differentiation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter. It does: 'comma-separated', include-only-those-accounts when supplied, otherwise scan everything. Format and default behavior are both conveyed, compensating well for the empty 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 gives a specific verb and resource: 'Generate a Top 10 leaderboard card', and clarifies the source is 'all local accounts'. It does not explicitly distinguish itself from the sibling leaderboard_entry, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explains the filter mechanics of the accounts parameter but never says when to use this tool versus leaderboard_entry or stats_card. There is no when/when-not guidance or named alternative, only procedural scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboard_entryGet leaderboard entryBRead-onlyIdempotent
Generate a verifiable leaderboard entry for ranking and PK.
Returns standardized JSON with ROI%, Sharpe, win rate, trade count, max drawdown, and account metadata. Designed for fair comparison: includes starting balance, total trades, and account age.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, so the safety profile is covered. The description adds the fair-comparison intent and enumerates metrics, but those return values are also carried by the output schema, so the net new behavioral insight is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence and kept to three short lines. There is mild redundancy between the metric list and the 'includes starting balance, total trades, and account age' sentence, but overall it earns its space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values needn't be re-explained, and the annotations cover the safety profile. The remaining deficits are the unexplained 'account' parameter and absent usage routing against its many sibling cards/stats tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single 'account' parameter (default 'default') is never explained in the description. An agent gets no guidance on what an account identifier means here or how multiple accounts behave.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Generate a verifiable leaderboard entry for ranking and PK'), so the agent knows this produces a ranking artifact. However, it does not distinguish itself from close siblings like stats, stats_card, leaderboard_card, or pk_card, leaving overlap ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'for ranking and PK' implies a purpose but gives no when-to-use condition, prerequisites, or named alternatives. With five similar stats/card siblings present, the absence of routing guidance is a real gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_marketsList marketsBRead-onlyIdempotent
List active Polymarket markets sorted by volume or liquidity.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| sort_by | No | volume |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds one behavioral qualifier, that only active markets are returned, which is useful filtering context, but says nothing about result size, truncation, or ordering behavior beyond the sort field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero padding. It is efficient, though arguably underpadded given the schema leaves both parameters undocumented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, and annotations cover safety. However with 0% parameter schema coverage and no usage routing, the definition is only minimally complete for a tool sitting among several overlapping market-listing siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It clarifies that sort_by accepts volume or liquidity (values absent from the schema) but never explains 'limit' or its default. Partial compensation for the coverage 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?
Clear verb (List) plus resource (active Polymarket markets) and a scope qualifier (active only), which distinguishes it somewhat from the more flexible search_markets sibling. It does not explicitly name or contrast with that sibling, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus search_markets, get_market, get_markets_by_tag, or get_tags. The word 'active' implies a filter but the reader gets no condition or exclusion criteria for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_ordersList limit ordersBRead-onlyIdempotent
List all pending limit orders.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful behavioral fact that only pending limit orders are returned (not filled/cancelled ones), but says nothing about scoping to an account or the default account behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, front-loaded with the verb and resource, and the 'pending' qualifier placed where it filters the result set. No padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. Still missing is why this tool exists alongside check_orders and how the account parameter affects the listing, leaving the agent to guess on the two points that actually require description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single 'account' parameter is documented only by its schema key and a 'default' value. The description never explains what the account parameter does, whether results are scoped to it, or what happens with the default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('limit orders') with an added scope qualifier ('pending'). It does not distinguish itself from the sibling check_orders, which plausibly covers overlapping order-status ground, so sibling differentiation is missing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus check_orders, cancel_order, or place_limit_order, and no mention of prerequisites such as account selection. The 'pending' qualifier implies a filter but never states what disqualifies an order from the result.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pk_battleRun strategy PK battleA
Run two strategies head-to-head in a PK battle.
Both start with the same balance. Each strategy runs independently, then results are compared with a PK card and winner announced.
strategy_a/b: dotted Python path like "examples.momentum.run" name_a/b: display names for the PK card
| Name | Required | Description | Default |
|---|---|---|---|
| name_a | No | player_a | |
| name_b | No | player_b | |
| balance | No | ||
| strategy_a | Yes | ||
| strategy_b | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare it is a non-read-only, open-world, non-idempotent, non-destructive operation, so the bar is lower. The description adds real behavioral context: both strategies start from the same balance, run independently, and results are compared with a winner announced. It still doesn't say whether the run mutates account balance/state or is simulated.
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?
Front-loaded with the core action, then mechanics, then parameter notes. No wasted sentences, though the trailing parameter glosses could be folded more cleanly into the prose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and annotations cover the safety profile. Combined with the mechanics description this is nearly complete; the missing balance parameter semantics is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate, and it does explain strategy_a/b (dotted Python path with an example) and name_a/b (display names). But the 'balance' parameter is never mentioned, leaving one of five parameters undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: running two strategies head-to-head and comparing them with a PK card. However, it never differentiates itself from the sibling 'backtest' tool, which an agent could plausibly confuse it with for strategy evaluation.
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 usage context is implied (use it when you want to compare two strategies), but there is no explicit when-to-use/when-not guidance and no mention of how it relates to alternatives like backtest or a single-strategy run.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pk_cardGenerate PK cardARead-onlyIdempotent
Generate a head-to-head PK comparison card between two accounts.
Compares ROI, Sharpe, win rate, trades, and tier. Outputs a tweet-ready card with winner announcement. Great for rivalry and sharing.
| Name | Required | Description | Default |
|---|---|---|---|
| account_a | No | default | |
| account_b | No | aggressive |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds useful output context ('tweet-ready card with winner announcement') but says nothing about how missing/invalid accounts are handled or what the defaults ('default', 'aggressive') imply.
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?
Front-loaded with the core action and the compared metrics in the first two sentences. The final sentence ('Great for rivalry and sharing') is light marketing copy that doesn't earn much of its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-format detail isn't required, and the annotations cover safety. The description covers purpose, compared dimensions, and output nature; the only real gap is the unexplained default account values.
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% for both parameters, so the description must carry the load. It does convey that the two inputs are the two accounts being compared head-to-head, which maps to account_a/account_b, but it adds no format, value, or default semantics beyond the names themselves.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Generate a head-to-head PK comparison card between two accounts') and enumerates the compared metrics (ROI, Sharpe, win rate, trades, tier). It is clear what the tool produces but never distinguishes it from the sibling pk_battle, which an agent would reasonably confuse it with.
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 closing line 'Great for rivalry and sharing' implies the social/competitive context in which to reach for this tool, giving implied usage. However, it offers no when-not guidance and never mentions pk_battle or the other card tools (stats_card, leaderboard_card) as alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
place_limit_orderPlace limit orderB
Place a limit order that stays open until filled or cancelled/expired.
side: "buy" or "sell" limit_price: target price between 0 and 1 order_type: "gtc" (stays open until cancelled) or "gtd" (expires at timestamp) expires_at: ISO timestamp for GTD orders (required if order_type="gtd")
| Name | Required | Description | Default |
|---|---|---|---|
| side | Yes | ||
| amount | Yes | ||
| account | No | default | |
| outcome | Yes | ||
| expires_at | No | ||
| order_type | No | gtc | |
| slug_or_id | Yes | ||
| limit_price | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=false, so the mutation/non-destructive profile is covered. The description usefully adds that the order persists until filled/expired and clarifies the gtc vs gtd lifecycle, but does not mention permissions, fund-holding/reservation, resolution behavior, or failure modes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The parameter notes are front-loaded and compact, but the list is bare and presentational rather than structured prose, and the split between the main sentence and the annotations is a bit disjointed. Nothing is wasted, but the format is not optimally organized.
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 presence of an output schema means return values need not be explained, and annotations cover safety. Still, for a non-idempotent order-placement tool with 8 params and 0% schema coverage, the description omits the meaning of core parameters and the effect of the order on the account.
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; it documents side, limit_price range (0–1), order_type semantics, and the gtd/expires_at dependency. However three required parameters (slug_or_id, outcome, amount) and the optional account parameter receive no explanation, leaving a substantial gap against the eight-parameter 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?
States a specific verb and resource ('Place a limit order') and defines the lifecycle ('stays open until filled or cancelled/expired'), which differentiates it from the sibling market-order tools buy/sell. It does not explicitly name those siblings, but the limit-order concept is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of buy, sell, or a market order, and no prerequisites or account context. The reader must infer that a limit order differs from the adjacent buy/sell tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
portfolioGet portfolioBRead-onlyIdempotent
Get all open positions with live prices and unrealized P&L.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and destructiveHint=false, so the safety profile is covered. The description adds that prices are live and P&L unrealized, hinting at real-time computation cost, but says nothing about latency, rate limits, or what happens when there are no open positions.
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?
One sentence, front-loaded with the verb and resource, with the valuable qualifier about live pricing following immediately. Nothing 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?
An output schema exists, so return values need no explanation, and annotations carry the safety profile. The gaps are the undocumented account parameter and the absence of any fleet-routing context among the balance/history siblings, leaving the definition merely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'account' parameter has 0% schema description coverage and a 'default' value, yet the description never mentions it. An agent cannot tell from the description whether omitting it is safe or what a named account selects, so the description does not compensate for the coverage 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?
States a specific verb (get) and resource (open positions) and clarifies the payload with 'live prices and unrealized P&L', which separates it in spirit from get_balance and history. It stops short of explicitly naming those siblings, so an agent must infer the boundary between positions, balance, and trade history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance, nor any mention of alternatives such as get_balance or history. The purpose implies a portfolio snapshot, but routing among the many read siblings is left entirely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_accountReset accountBDestructiveIdempotent
Reset account — deletes all trades, positions, and balance.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, so the safety profile is covered. The description adds concrete value beyond that by enumerating exactly what is destroyed (trades, positions, balance), which the annotations do not specify. It stops short of noting irreversibility or confirmation requirements.
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?
One short, front-loaded sentence with no filler; the destructive consequence is stated immediately. It is arguably too terse given the omission of the account parameter, but nothing 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?
The output schema exists, so return values need not be explained, and annotations carry the safety profile. However, for a destructive reset the description omits which account is reset and any irreversibility note, leaving a meaningful gap for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single 'account' parameter has 0% schema description coverage and the description never mentions it, so its meaning, the effect of the 'default' value, or how targeting a non-default account behaves is left entirely to the raw schema. With coverage this low, the description should have compensated and does not.
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 gives a specific verb ('reset') plus an explicit, enumerated scope of what is affected: all trades, positions, and balance. This tells an agent exactly what the operation does and how its blast radius compares to sibling tools like buy, sell, or portfolio, though it never names a sibling to sharpen the contrast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use or when-not-to-use guidance and no mention of the natural counterpart init_account. An agent gets no signal about prerequisites, sequencing, or alternative tools for clearing data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolveResolve market positionsCIdempotent
Resolve a market's positions, paying out $1/share for winning outcome.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default | |
| slug_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose that this is a mutation (readOnlyHint=false), open-world, idempotent, and non-destructive, so the agent knows repeated calls are safe. The description adds the payout semantics (winning shares redeem at $1), which is useful beyond the annotations, but says nothing about permissions, what happens to losing positions, or whether the action can be reversed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence with the verb and the payout consequence front-loaded and no wasted filler. It is arguably under-specified rather than verbose, but as prose it is efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, but the definition is still thin for a state-mutating financial tool: undocumented parameters (0% schema coverage), no guidance on the resolve vs resolve_all choice, and no precondition that the market be resolvable. Too much is left to inference.
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% for both parameters, so the description must carry the load and it does not. Neither 'slug_or_id' (which identifier format is accepted) nor 'account' (and its 'default' value / multi-account semantics) is explained anywhere.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (resolve) and resource (a market's positions) plus the payout rule ($1/share for winning outcome), which is more informative than the title. However it never distinguishes itself from the sibling tool resolve_all, leaving the agent to guess which scope applies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: no prerequisite that a market be closed/expired, no mention of when to prefer resolve over the sibling resolve_all, and no note on ordering relative to buy/sell or cancel_order. Only the implied purpose conveys any usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_allResolve all closed positionsCIdempotent
Resolve all open positions in closed/resolved markets.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a mutation (readOnlyHint=false) that is idempotent and non-destructive. The description adds essentially no behavioral context beyond that - it does not state what happens to the resolved positions, whether it affects all accounts, or what permissions are needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence, front-loaded with the verb and scope, with no wasted words. It is efficient, though the brevity contributes to the ambiguity noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists so return values need not be explained, but for a bulk mutation tool with zero annotation-independent guidance and an undocumented parameter, the description is too thin to let an agent invoke it confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one parameter ('account', default 'default') with 0% schema description coverage, and the description never mentions it or explains what account scoping means. The single sentence provides no compensating meaning for the undocumented parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a verb (resolve) and a resource (all open positions in closed/resolved markets), which is more specific than the title. However, it does not distinguish itself from the sibling tool 'resolve', and the title ('Resolve all closed positions') conflicts with the description's 'open positions', leaving scope ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this bulk operation versus the singular 'resolve' sibling, nor any stated preconditions (e.g., that markets must already be closed/resolved). Usage must be inferred entirely from the description text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_marketsSearch marketsCRead-onlyIdempotent
Search Polymarket for markets matching a query string.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds nothing beyond that: no ranking/relevance behavior, no pagination or limit semantics, no note that search is against live Polymarket 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?
One tight sentence with the action and resource front-loaded and zero filler. It is efficient, though the brevity is partly under-specification rather than disciplined concision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, but with 0% schema coverage and no sibling routing the agent is left guessing how 'limit' behaves and when this beats list_markets. For a two-parameter search tool in a 29-tool family, the definition is thinner than it needs to be.
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 carries the full burden for two parameters. It clarifies that 'query' is a string match, but says nothing about the 'limit' parameter (default 10) or whether the query supports keywords, phrases, or fuzzy matching.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('search') and resource ('markets') plus the domain (Polymarket), and 'matching a query string' signals this is a filtered lookup rather than an enumeration. It implicitly distinguishes itself from list_markets and get_market, though it never names them explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of list_markets, get_market, or get_markets_by_tag, despite three plausible siblings existing. The only hint is the presence of a 'query' parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sellSell sharesB
Sell shares in a Polymarket outcome.
Sells shares at best available prices. order_type: "fok" (fill-or-kill) or "fak" (fill-and-kill, allows partial).
| Name | Required | Description | Default |
|---|---|---|---|
| shares | Yes | ||
| account | No | default | |
| outcome | Yes | ||
| order_type | No | fok | |
| slug_or_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a non-idempotent, non-read-only write, and the description adds real behavioral context by defining the order execution modes ('fok' kills the whole order, 'fak' allows partial fills). That is meaningful disclosure beyond the structured fields, though execution guarantees and failure behavior are not fully described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short lines with the core purpose front-loaded and no filler. The stray quoting/line break around the order_type sentence is slightly untidy but does not waste space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need no explanation, and annotations cover the safety profile. However, for a 5-parameter trade tool, key inputs (how to identify the outcome, what 'account' selects) are never addressed, leaving gaps an agent would need to guess at.
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 carry the burden, yet it only explains one of five parameters (order_type). The meanings of slug_or_id, outcome, shares, and account are left entirely undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Sell shares in a Polymarket outcome') and the execution style ('at best available prices'). This distinguishes it implicitly from the sibling 'buy' and from 'place_limit_order', but neither alternative is named, so sibling differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'best available prices' signals a market-order sell as opposed to a limit order, but there is no explicit when-to-use, when-not, or pointer to 'place_limit_order'/'buy'. An agent can infer the context but gets no routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
statsGet performance statsCRead-onlyIdempotent
Get performance analytics: win rate, ROI, profit, max drawdown.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, covering the safety profile. The description adds useful detail about the metrics returned (win rate, ROI, profit, max drawdown) but does not disclose account scoping, time range, or whether the data is live or cached.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that lists the key metrics with no wasted words. It is appropriately sized for a simple read tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be detailed, and annotations cover the safety profile. However, the description is incomplete regarding the account parameter and usage context, which are not covered elsewhere.
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 does not mention the single 'account' parameter at all. It neither explains the parameter's purpose nor notes the default value, leaving the agent without any semantic guidance for that input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (Get) and resource (performance analytics) and enumerates the exact metrics returned, making the purpose clear. However, it does not distinguish this tool from close siblings like stats_card, portfolio, or history, so an agent could still confuse which stats tool to call.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as stats_card, history, or portfolio. The description simply states what it retrieves without any context, prerequisites, or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stats_cardGet stats cardARead-onlyIdempotent
Get a shareable stats card — ready to post on X, Telegram, Discord, etc.
Returns a formatted card showing ROI, Sharpe, win rate, P&L.
format: "tweet" (X/Twitter optimized), "markdown" (chat apps), "plain" (no formatting)
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | markdown | |
| account | No | default |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/openWorldHint and destructiveHint=false, so the safety profile is covered structurally. The description adds the social-sharing intent and output framing, but says nothing about account resolution behavior (e.g., what happens with an unknown account) or any rate limits on generated cards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded lines: what it is, what it returns, and the format options. No filler sentences, and the shareable-card purpose is stated before the details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so the return values need not be re-explained, and the description still usefully summarizes them. The main gap is the undocumented `account` parameter, which is the only element an agent could get wrong.
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 carry the load. It does compensate well for `format` by enumerating tweet/markdown/plain, which the schema lacks (no enum, no description, only a default of markdown). But the `account` parameter is never mentioned anywhere, leaving half the inputs undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get a shareable stats card') and enumerates the payload it returns (ROI, Sharpe, win rate, P&L). That content signature distinguishes it from siblings such as `stats` (raw data), `pk_card`, and `leaderboard_card` without needing to open the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'ready to post on X, Telegram, Discord' framing implies the use case (sharing a performance summary) and the format parameter routes the agent to the right output style. However, it never states when to prefer this over the sibling `stats` tool or when it should not be used, so usage is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
watch_pricesWatch pricesBRead-onlyIdempotent
Watch live midpoint prices for one or more markets.
slugs: comma-separated market slugs or condition IDs outcomes: comma-separated outcomes (default: "yes")
| Name | Required | Description | Default |
|---|---|---|---|
| slugs | Yes | ||
| outcomes | No | yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=true, so the safety profile is covered. The description adds that prices are 'live' and that they are 'midpoint' prices, which is real behavioral context, but it stays silent on whether this starts a subscription/stream, how often values update, or whether the call blocks. With annotations carrying the safety burden, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose in the first sentence, followed by a compact two-line parameter note. Every line earns its place and there is no filler. Slightly more structure (e.g. listing parameter semantics inline as bullets) could be tighter, but it is well sized for a 2-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained, and the low parameter count keeps the surface small. What is missing is behavioral completeness around the streaming semantics implied by 'watch' — update cadence, subscription lifetime, and cancellation — plus any usage scaffolding versus siblings, leaving the definition merely adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full responsibility, and it largely delivers: slugs is clarified as 'comma-separated market slugs or condition IDs' and outcomes as 'comma-separated outcomes (default: "yes")', giving format and default for both parameters. It does not enumerate valid outcome tokens (e.g. whether 'no' is accepted), which keeps it from a 5, but the format guidance clearly exceeds the empty 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?
States a specific verb+resource combination: 'Watch live midpoint prices for one or more markets.' The word 'live' and the streaming verb 'watch' imply continuous/ongoing observation, which meaningfully distinguishes it from the one-shot lookup siblings like get_market, get_order_book, or search_markets. However, it never explicitly names those siblings or codifies the streaming-vs-snapshot distinction, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all. Given a crowded sibling set (get_market, get_order_book, search_markets, buy, sell), an agent gets no signal about when to watch prices versus doing a one-shot fetch, nor any exclusions or prerequisites. The description only restates what the tool does, not when it should be chosen.
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.
3 tool updates
v0.4.12- Added
kalshi_book - Added
kalshi_market - Added
kalshi_markets
30 tool updates
v0.4.1- First observed
backtest - First observed
buy - First observed
cancel_all_orders - First observed
cancel_order - First observed
check_orders - First observed
get_balance - First observed
get_event - First observed
get_market - First observed
get_markets_by_tag - First observed
get_order_book - First observed
get_tags - First observed
history - First observed
init_account - First observed
leaderboard_card - First observed
leaderboard_entry - First observed
list_markets - First observed
list_orders - First observed
pk_battle - First observed
pk_card - First observed
place_limit_order - First observed
portfolio - First observed
reset_account - First observed
resolve - First observed
resolve_all - First observed
search_markets - First observed
sell - First observed
share_content - First observed
stats - First observed
stats_card - First observed
watch_prices
TDQS
Scored across 33 tools
Core trading tools (buy, sell, place_limit_order, cancel_order, check_orders) are clearly differentiated, and market data vs account tools are mostly distinct. However, the analytics/social layer has overlapping outputs: stats, stats_card, share_content, leaderboard_entry, leaderboard_card, pk_card, and pk_battle all produce shareable performance summaries, so selection can require close reading.
Names are all snake_case and many follow verb_noun (cancel_order, get_market, place_limit_order), but there is no single convention: noun-only tools (stats, portfolio, history), bare verbs (buy, sell, resolve), and prefixed domain names (kalshi_market, pk_card, leaderboard_card) are mixed. The pattern is readable but inconsistent.
With 33 tools, the server is heavy for a paper-trading domain. While it spans trading, market data, analytics, social sharing, and backtesting, several tools are presentation variants of the same underlying stats and could be consolidated, so many tools do not clearly earn their place.
The set covers account lifecycle, market discovery, order placement/cancellation/fill checking, portfolio/history, analytics, resolution, and backtesting, so core paper-trading workflows are present. Minor gaps include no order modification or detailed order retrieval, and Kalshi is read-only by design, but the surface is robust overall.
Maintenance
Related MCP Connectors
Paper trade prediction markets at live prices from your AI agent, and score every trade.
Polymarket in your AI: market rules, real fill costs, who is trading, top traders. Read-only.
Polymarket + Hyperliquid + macro for AI agents. 38 tools, signal backtest, SSE streaming. Free tier.
Paper trading for AI: live quotes, indicators, and virtual trades on stocks, crypto, and forex.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides a comprehensive set of tools for Polymarket prediction market trading, including Gamma discovery, CLOB trading, gasless relayer, managed WebSockets, and paper simulation, enabling agents to interact with Polymarket natively.MIT
- AlicenseBqualityDmaintenanceEnables LLM agents to interact with Polymarket prediction markets, including market discovery, real-time pricing, analytics, account management, and trading with built-in safety guards.34MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to discover prediction markets, view real-time data, execute trades (market/limit orders), and manage portfolios on Polymarket.627 npm3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to autonomously trade, analyze, and manage positions on Polymarket prediction markets with 45 tools, real-time WebSocket monitoring, and enterprise-grade safety features.MIT
