Skip to main content
Glama
agent-next

polymarket-paper-trader

by agent-next

polymarket-paper-trader

PyPI Tests ClawHub License: MIT

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-benchmark harness 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

Part of agent-next — building an agentic world.

60-second demo

npx clawhub install polymarket-paper-trader    # install via ClawHub
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 card

That's it. Your AI agent is now trading Polymarket with zero risk.

Related MCP server: Polymarket MCP Server

Install

# via pip
pip install polymarket-paper-trader

# via ClawHub (for OpenClaw agents)
npx clawhub install polymarket-paper-trader

# from source (development)
uv pip install -e ".[dev]"

Requires Python 3.10+.

Works with

Runtime

One-line install

Claude Code

/plugin marketplace add agent-next/polymarket-paper-trader

Codex CLI

codex mcp add polymarket-paper-trader -- uvx --from polymarket-paper-trader pm-trader-mcp

Cursor

Add to Cursor

Gemini CLI

gemini extensions install https://github.com/agent-next/polymarket-paper-trader

OpenCode / Goose / Cline / Windsurf / Copilot

add pm-trader-mcp to the client's MCP config

OpenClaw / ClawHub

npx clawhub install polymarket-paper-trader

Hermes Agent / LangChain / OpenAI Agents SDK / CrewAI

wrap uvx --from polymarket-paper-trader pm-trader-mcp

Full copy-paste config for every runtime above (plus Grok/xAI remote MCP): docs/integrations.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 stats

How 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 approximation

  • Paper 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 (or resolve --all) when a market closes and winners pay out like the real thing

  • Verified 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

  • 100% coverage gate on the core package, plus end-to-end tests against the live API

CLI commands

Command

Description

init [--balance N]

Create paper trading account

balance

Show cash, reserved/available cash, positions value, total P&L

reset --confirm

Wipe all data

markets list [--limit N] [--sort volume|liquidity]

Browse active markets

markets search QUERY

Full-text market search

markets get SLUG

Market details

markets tags

List all market categories/tags

markets event SLUG

Event details — a group of related markets

price SLUG

YES/NO midpoints and spread

book SLUG [--depth N]

Order book snapshot

watch SLUG [SLUG...] [--outcome yes|no]

Monitor live prices

buy SLUG OUTCOME AMOUNT [--type fok|fak]

Buy at market price

sell SLUG OUTCOME SHARES [--type fok|fak]

Sell at market price

portfolio

Open positions with live prices

history [--limit N]

Trade history

orders place SLUG OUTCOME SIDE AMOUNT PRICE

Limit order (GTC/GTD)

orders list

Open limit orders (pending and partially filled)

orders cancel ID

Cancel a limit order

orders cancel-all

Cancel all pending limit orders at once

orders check

Fill limit orders if price crosses

stats [--card|--tweet|--plain]

Win rate, ROI, profit, max drawdown

resolve [SLUG] [--all]

Resolve a closed market, or all closed markets (winners get $1/share)

leaderboard

Local account rankings

pk ACCOUNT_A ACCOUNT_B

Battle: who's the better trader?

export trades [--format csv|json]

Export trade history

export positions [--format csv|json]

Export positions

strategy run MODULE.FUNC

Run a trading strategy

strategy compare ACCT1 ACCT2

Compare account performance

strategy pk STRAT_A STRAT_B

Battle: who's the better trader?

benchmark run MODULE.FUNC

Alias of strategy run

benchmark compare ACCT1 ACCT2

Alias of strategy compare

benchmark pk STRAT_A STRAT_B

Alias of strategy pk

accounts list

List named accounts

accounts create NAME

Create account for A/B testing

accounts delete NAME --confirm

Delete a named account and all its data

mcp

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-mcp

Add 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 0.0.0.0 --port 8000
# or: pm-trader mcp --transport streamable-http --host 0.0.0.0 --port 8000

The 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-mcp

Publish 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

init_account

Create paper account with starting balance

get_balance

Cash, reserved/available cash, positions value, total P&L

reset_account

Wipe all data and start fresh

search_markets

Find markets by keyword

list_markets

Browse markets sorted by volume/liquidity

get_tags

All market categories/tags for filtering

get_markets_by_tag

Markets in a specific category/tag

get_event

Event details — a group of related markets

get_market

Market details with outcomes and prices

get_order_book

Live order book snapshot (bids + asks)

watch_prices

Monitor prices for multiple markets

buy

Buy shares at best available prices

sell

Sell shares at best available prices

portfolio

Open positions with live valuations and P&L

history

Recent trade log with execution details

place_limit_order

Limit order — stays open until filled or cancelled/expired

list_orders

Pending limit orders

cancel_order

Cancel a pending order

cancel_all_orders

Cancel all pending limit orders at once

check_orders

Execute pending orders against live prices

stats

Win rate, ROI, profit, max drawdown

resolve

Resolve a closed market (winners get $1/share)

resolve_all

Resolve all closed markets

backtest

Backtest a strategy against historical snapshots (stdio only)

stats_card

Shareable stats card (tweet/markdown/plain)

share_content

Platform-specific content (twitter/telegram/discord)

leaderboard_entry

Generate verifiable leaderboard submission

leaderboard_card

Top 10 ranking card from all local accounts

pk_card

Head-to-head comparison between two accounts

pk_battle

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.run

Mean 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.run

Limit 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.run

Jev 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.run

For 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 mini

Run 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 conservative

Share 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 text

AI 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-trader

GitHub 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

polymarket-benchmark

benchmark/

LLM evaluation harness — see Evaluate your agent

polymarket-leaderboard-client

leaderboard-client/

Client SDK for a compatible leaderboard server: register an agent, trade, read portfolio and stats.

polymarket-leaderboard

leaderboard-server/

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 only

License

MIT

Available Tools

30 tools
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

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
spreadNo
balanceNo
data_pathYes
strategy_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does not state whether backtest is a read-only simulation, whether it modifies account state, or what side effects (if any) it has. The absence of any such disclosure leaves the agent uncertain about safety and side effects.

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

Conciseness5/5

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

The description is extremely efficient: a single clear opening sentence followed by a parameter list, with each parameter on its own line. There is no filler or redundancy, and the most important information is front-loaded.

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

Completeness2/5

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

The description lacks context about what happens after the backtest runs—such as whether it returns a report, whether it is a pure simulation, or whether it affects the account. It also omits details like the expected format of CSV/JSON data or the strategy function's signature. While an output schema exists (so return values need not be explained), the description does not address the tool's non-obvious behavior as a simulation, leaving an agent with incomplete guidance.

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

Parameters4/5

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

The description explains each of the five parameters with concise, meaningful context that goes beyond the bare schema (which has 0% coverage). It clarifies the expected format for data_path and strategy_path, and gives sensible defaults for balance, spread, and depth. While not exhaustive, it covers all parameters and adds practical value.

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

Purpose5/5

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

The description states a specific verb ('Run') and a clear resource ('a backtest') with a qualifying context ('with historical price data'). This distinguishes it from the trading actions (buy, sell) and portfolio tools among its siblings, making the purpose immediately obvious.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention that it is for simulation/testing rather than live trading, nor does it reference any sibling tools or conditions that would steer an agent toward or away from backtest.

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

buyB

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault
outcomeYes
amount_usdYes
order_typeNofok
slug_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

With no annotations, the description carries the burden. It discloses that buys execute at best available prices and explains the fok/fak semantics including partial fills. However, it leaves out failure cases, fees, and what happens when the order cannot fill, so transparency is partial.

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

Conciseness4/5

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

The description is short and front-loads the primary action in the first sentence. The order-type explanation is compact and relevant, though the formatting could be slightly tightened without losing information.

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

Completeness2/5

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

For a financial mutation tool with no annotations and an almost entirely undescribed input schema, the description is not complete enough. Nothing is said about account prerequisites, valid outcome values, or how a partial fill affects the resulting position, even though an output schema is present.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It explains order_type and amount_usd, but none of the required fields slug_or_id, outcome, or account are clarified; for example, valid outcome values are not given. An agent cannot reliably know the expected string format for these core parameters.

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

Purpose4/5

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

The description clearly states the action: buying shares in a Polymarket outcome. It signals a market-style buy by mentioning 'best available prices,' but it does not explicitly differentiate it from the sibling place_limit_order or describe the difference between these order types.

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

Usage Guidelines3/5

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

The execution behavior (spending amount_usd at best available prices, fok/fak options) implies immediate market-order usage, but there is no explicit when-to-use versus alternatives such as place_limit_order, and no mention of prerequisites like account initialization.

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

cancel_all_ordersB

Cancel all pending limit orders at once.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3/5.0
Behavior2/5

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

With no annotations provided, the description carries full responsibility for disclosing behavioral traits. It states the action but does not mention whether this is irreversible, how it handles non-limit orders, whether it confirms the cancellation count, or any side effects. A mutation tool of this nature should specify these details, especially since the output schema is not described.

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

Conciseness4/5

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

The description is a single, focused sentence with no unnecessary words. The action is front-loaded, making the tool's purpose immediately clear. However, it is concise to the point of omitting essential context, but that is penalized in other dimensions. For this dimension alone, it is efficiently structured.

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

Completeness2/5

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

The tool is a mutation with no annotations, no parameter explanation, and no return-value description (despite having an output schema). It does not clarify whether it cancels all orders globally or within a specific account, nor does it mention irreversibility or order-type exclusions. The description is too sparse to fully guide an agent in invoking it correctly, especially given the many sibling tools that deal with orders.

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

Parameters1/5

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

The schema has a single parameter 'account' with a default value, and schema description coverage is 0%. The description does not mention the parameter at all, leaving its purpose ambiguous. An agent cannot infer whether 'account' selects a specific trading account, a portfolio, or something else. The description fails to compensate for the lack of schema documentation.

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

Purpose5/5

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

The description states a specific action (cancel), resource (all pending limit orders), and scope (at once). It clearly distinguishes from the sibling cancel_order, which cancels a single order, by explicitly indicating batch cancellation. This is unambiguous and specific enough for an agent to understand the tool's role.

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

Usage Guidelines3/5

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

The description implies a clear use case: cancel all pending limit orders in one go. However, it does not explicitly name alternative tools (e.g., cancel_order for individual orders) or provide guidance on when not to use it. An agent must infer the distinction from the sibling name alone, which is a mild gap.

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

cancel_orderA

Cancel a pending limit order by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault
order_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral disclosure burden. It clearly conveys that this is a destructive operation scoped to 'pending limit orders,' which tells an agent that filled or already-canceled orders are not valid targets. It does not discuss permissions, idempotency, or side effects, but the core effect is adequately stated.

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

Conciseness5/5

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

The description is a single seven-word sentence with no filler. The action is front-loaded and every word adds a meaningful constraint—cancel, pending, limit, by ID. This is appropriately concise for a two-parameter tool.

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

Completeness4/5

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

The tool is simple, the required order_id is visible in the schema, and the presence of an output schema removes the need for the description to explain return values. The description states the key precondition ('pending') and object type ('limit order'), though the account parameter's role remains implicit.

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

Parameters2/5

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

Schema description coverage is 0% and the description only says 'by ID,' which loosely maps to the required order_id parameter. It adds nothing about the account parameter or its default, leaving an agent to guess whether account must be supplied in multi-account contexts.

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

Purpose5/5

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

The description names a concrete action ('Cancel') and a precise object ('a pending limit order by ID'). The 'by ID' qualifier clearly distinguishes this single-order tool from the sibling cancel_all_orders and from list/order-checking tools.

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

Usage Guidelines3/5

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

The description implies the intended use—cancel one pending order—and 'pending' hints at a precondition that only open/unfilled orders qualify. However, it never explicitly names alternatives or exclusions, such as using cancel_all_orders for bulk cancellation or noting that non-limit/non-pending orders cannot be canceled.

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

check_ordersB

Check all pending limit orders against live prices and execute fills.

Call this periodically to trigger limit order evaluation.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral disclosure. It openly states the main side effect—executing fills—and frames the tool as a trigger/evaluation step. But it doesn't mention account scoping, whether fills are irreversible real trades, partial-fill behavior, or what happens when there are no pending orders.

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

Conciseness5/5

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

Two short, front-loaded sentences: the first states the action, the second the cadence. There is no filler or repetition; every sentence earns its place.

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

Completeness2/5

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

The core action and triggering cadence are present, and an output schema exists, so return values need not be described. But for a side-effecting tool with no annotations, the undocumented account parameter and the ambiguous 'all pending' scope leave a material gap: an agent cannot tell whether this operates on one account or all, or what consequences fills have beyond the output schema.

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

Parameters1/5

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

The schema has one parameter (account) with 0% description coverage, and the description never mentions it. 'All pending limit orders' even creates ambiguity about whether account filters the scope. The description adds no meaning to the only parameter, so an agent cannot infer what account means or how to set it.

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

Purpose5/5

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

The description uses a specific verb and resource: it 'checks all pending limit orders against live prices and executes fills.' This clearly names the tool's action and distinguishes it from siblings like list_orders (view only), cancel_order (cancel), and place_limit_order (create).

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

Usage Guidelines3/5

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

It gives one explicit usage directive ('Call this periodically to trigger limit order evaluation'), which tells an agent when to invoke it. However, it provides no guidance about when not to use it or how it relates to alternatives such as list_orders or resolve/resolve_all; 'periodically' is vague and no exclusions are stated.

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

get_balanceA

Get current account balance (cash, reserved/available cash), positions value, and P&L.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It clearly indicates a read operation (via 'get'), but it does not disclose additional behavioral traits such as authentication requirements, error handling, or any side effects. For a simple read, this is adequate but minimal.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the core action and lists the return components without redundancy. Every word earns its place.

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

Completeness4/5

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

For a simple read tool with an output schema, the description covers the essential information about what is returned. However, it omits any mention of the optional 'account' parameter and does not address error conditions or prerequisites. Given the tool's low complexity, this is mostly complete but not fully.

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

Parameters2/5

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

The schema has 0% description coverage for the 'account' parameter, and the description does not mention this parameter at all. Since there is a parameter, the description should compensate for the lack of schema documentation, but it provides no context about what 'account' means or how to specify it.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get current account balance' and enumerates the specific components returned (cash, reserved/available cash, positions value, and P&L). It uses a specific verb and resource, making it distinct from siblings like portfolio or history.

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

Usage Guidelines3/5

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

The description implies usage when account balance information is needed, but it does not explicitly state when to use it versus alternatives like portfolio or history. No exclusions or alternative conditions are given.

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

get_eventC

Get event details — a group of related markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a read-like operation but does not mention what details are returned, whether markets are nested, whether a valid slug is required, or any other observable behavior beyond the name.

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

Conciseness4/5

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

The description is one short sentence with no filler, and the key idea 'get event details' is front-loaded. The clarifying phrase 'a group of related markets' earns its place by disambiguating the resource.

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

Completeness3/5

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

This is a simple read tool with one parameter and an output schema, so the description is close to minimally viable. However, the lack of any explanation of 'slug' and the absence of comparison to similar tools make it incomplete for an agent that needs to know how to invoke it correctly.

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

Parameters1/5

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 explain the 'slug' parameter at all. The agent only knows that a slug is required, not what slug refers to, its format, or how to find one. This is a significant gap.

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

Purpose4/5

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

The description states a clear verb and resource: 'Get event details' and defines an event as 'a group of related markets.' This meaningfully distinguishes it from get_market, which presumably returns individual market details. However, it does not explicitly name sibling alternatives.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like get_market, list_markets, or search_markets. The definition of an event as a group of related markets implies some context, but the description never states conditions or trade-offs 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.

get_marketA

Get detailed info for a specific market by slug or condition ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
slug_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It indicates a read operation ('Get detailed info') but does not explicitly state read-only behavior, error handling (e.g., market not found), authentication requirements, or any side effects. The description is too sparse to convey behavioral traits beyond the basic action.

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

Conciseness5/5

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

The description is a single, front-loaded sentence with zero wasted words. It immediately states the action and the identifying information needed, making it highly scannable for an agent.

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

Completeness3/5

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

Given the existence of an output schema, return values need not be explained. However, the description is minimal and lacks usage context, such as when to prefer this tool over list_markets or search_markets, and does not mention potential error conditions. For a simple single-parameter get tool, it is adequate but leaves room for better guidance.

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

Parameters4/5

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

The schema provides only a parameter name and type ('slug_or_id' as string) with no description (0% coverage). The description adds critical semantic meaning by clarifying that the parameter can be either a slug or a condition ID, which directly compensates for the schema gap. However, it does not provide format examples or constraints, so it is not a perfect 5.

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

Purpose5/5

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

The description clearly states the verb 'Get' and the resource 'detailed info for a specific market', and specifies the identification method (by slug or condition ID). It distinguishes itself from siblings like list_markets (which lists all) and search_markets (which searches) by targeting a single, known market.

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

Usage Guidelines3/5

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

The description implies usage when a specific slug or condition ID is known, but it does not explicitly contrast with alternatives or state when not to use this tool. No exclusions or conditions are given, leaving the agent to infer when this tool is preferred over siblings.

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

get_markets_by_tagB

List markets in a specific category/tag.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
tag_slugYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the transparency burden; 'List' indicates a read-style operation with no obvious side effects. However, it does not disclose behavior around the optional limit parameter, pagination, or what happens for an unknown tag, so it is adequate but not rich.

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

Conciseness5/5

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

A single front-loaded sentence with no filler or redundancies; every word contributes to identifying the operation.

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

Completeness3/5

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

For a simple 2-parameter listing tool with an output schema, the description plus schema is close to sufficient. It falls short because it does not mention how limit behaves or how this tool relates to siblings like list_markets and search_markets, which an agent would need to route correctly.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It only describes the tag concept, not the tag_slug value format or the meaning of limit, despite limit being present in the schema with a default. The name and schema make tag_slug guessable, but limit is left unexplained.

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

Purpose4/5

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

The description uses a clear verb ('List'), resource ('markets'), and filter ('specific category/tag'), so an agent knows what operation is offered. It doesn't explicitly contrast with sibling tools like list_markets, search_markets, or get_tags, so it loses the last point.

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

Usage Guidelines3/5

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

The phrase 'in a specific category/tag' implies the tool is for tag-filtered listing, but there is no explicit guidance about when to choose this over list_markets, search_markets, or get_tags. This is implied usage rather than stated routing.

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

get_order_bookA

Get the live order book for a market outcome (asks and bids).

ParametersJSON Schema
NameRequiredDescriptionDefault
outcomeNoyes
slug_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It conveys that the tool returns live asks and bids, which is useful behavioral context, but does not disclose read-only guarantees, rate limits, pagination, or any side effects. The 'Get' verb implies a safe read, but this is not explicit.

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

Conciseness5/5

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

A single, clear sentence that wastes no words. It answers what the tool does and its main output content immediately, and the parenthetical 'asks and bids' is a high-value clarification.

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

Completeness3/5

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

The tool has an output schema, so return-value details are already covered. However, the description omits enough context for correct invocation: no guidance on how to identify outcomes, what slug_or_id refers to, or when to prefer this over get_market. It is minimally adequate but leaves gaps.

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

Parameters2/5

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

Schema description coverage is 0% and the description adds almost no parameter-level meaning. It mentions 'market outcome' but does not explain the required slug_or_id parameter, its format, or how outcome interacts with it. The burden was on the description to compensate for an empty schema, and it failed to do so.

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

Purpose5/5

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

The description uses a specific verb ('Get'), names a clear resource ('live order book'), and scopes it to a 'market outcome' while clarifying the content ('asks and bids'). This distinguishes it from sibling tools like get_market and watch_prices, which serve different data purposes.

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

Usage Guidelines3/5

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

The description implies a clear use case—fetching live bid/ask data for a specific outcome—but provides no explicit guidance on when to choose this tool over alternatives like get_market, nor any exclusions or prerequisites. It relies on the reader to infer when it should be used.

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

get_tagsA

Get all market categories/tags for filtering.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are present, so the description carries the behavioral disclosure burden. The verb 'Get' implies a read-only operation and 'all' specifies scope, but it does not mention edge cases like empty categories, private tags, or other behavioral details; the output schema is expected to cover return shape.

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

Conciseness5/5

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

A single sentence that front-loads the action and resource, with no filler or redundancy. Every word contributes meaning.

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

Completeness5/5

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

For a zero-parameter tool with an output schema and a straightforward read-only purpose, the description is complete. It tells an agent exactly what is returned and why it is useful, and no additional guidance is needed to invoke it correctly.

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

Parameters4/5

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

The tool has zero parameters, so there are no parameter semantics for the description to add. Schema coverage is trivially 100%, and the description correctly focuses on the result rather than parameters.

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

Purpose5/5

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

The description states a specific verb ('Get'), resource ('market categories/tags'), and scope ('all'), and 'for filtering' clarifies its role. This distinguishes it from sibling market-listing tools like list_markets or get_markets_by_tag, which operate on markets rather than the tag taxonomy.

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

Usage Guidelines3/5

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

The phrase 'for filtering' implies the tool is used to obtain filter options, but there is no explicit statement of when to use this tool versus alternatives such as get_markets_by_tag. It gives implied usage context but no exclusions or prerequisites.

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

historyC

Get recent trade history.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It only says 'recent trade history' and does not disclose whether history is account-scoped, how 'recent' is determined, or whether the account parameter changes the result set.

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

Conciseness4/5

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

One short sentence with no filler, and the core resource is front-loaded. It is appropriately compact, though the vagueness of 'recent' prevents a higher score.

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

Completeness2/5

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

The output schema may document the return shape, but the description still fails to explain account scoping, recency semantics, or when to select this tool over sibling trade and order tools. For a tool with no annotations, this is incomplete.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no meaning to limit or account. An agent has to guess whether limit caps the number of trades and what account string refers to, since the description provides no clarification.

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

Purpose4/5

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

States a specific action and resource: 'Get recent trade history.' This is clearly distinct from siblings like portfolio or get_balance because it targets executed trades, though it does not explicitly compare itself to alternatives.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus list_orders, portfolio, or get_balance. An agent must infer the appropriate context from the tool name and sibling list rather than from explicit instructions.

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

init_accountB

Initialize a paper trading account with starting balance (USD).

Creates a new account or resets an existing one.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault
balanceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It says the tool creates or resets an account, but it does not disclose what a reset destroys, such as existing balance or history, whether the operation is reversible, or any permission implications. For a state-changing tool, this is a meaningful gap.

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

Conciseness5/5

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

The description is two short sentences with no filler. The core purpose is front-loaded, and the additional create/reset behavior is stated clearly in the second sentence.

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

Completeness3/5

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

For a simple two-parameter tool with an output schema available, the description is nearly adequate. However, it omits the destructive implications of resetting and gives no guidance on the account parameter, so an agent may not fully understand the consequences before invoking the tool.

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

Parameters2/5

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

The schema provides no parameter descriptions (0% coverage), so the description must compensate. It adds that the balance is a USD starting balance, which is useful, but it leaves the account parameter completely unexplained beyond its default value. The compensation is only partial.

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

Purpose5/5

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

The description states a specific verb and resource: initialize a paper trading account with a USD starting balance. It further clarifies that it creates a new account or resets an existing one, distinguishing it from trading operations like buy/sell and from the sibling reset_account by covering creation as well.

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

Usage Guidelines3/5

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

There is no explicit when-to-use or when-not-to-use guidance, and no alternative tools are named. The phrase 'Creates a new account or resets an existing one' implies it is the setup/reset entry point, but it does not explain how this relates to the sibling reset_account tool.

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

leaderboard_cardA

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 all accounts in ~/.pm-trader/.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the full burden for behavioral disclosure. It explains the ranking rule, account qualification, scanning path (~/.pm-trader/), and filtering behavior, which is meaningful. But it does not explicitly state that generating a card is read-only and has no side effects, and it does not describe what a 'card' is or where it is written, leaving some ambiguity.

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

Conciseness5/5

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

Three short sentences, front-loaded with the primary purpose, followed by ranking details and a conditional usage rule. Every sentence adds necessary information with no redundancy or filler.

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

Completeness4/5

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

Given the simplicity of the tool (1 optional param, output schema present), the description covers the core behavior: generation, ranking criteria, account filtering, and default scanning scope. It could briefly mention the expected output form or edge cases (e.g., no qualified accounts), but these are mostly covered by the output schema and the description is adequate for a tool of this complexity.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It does: it explains the comma-separated format for 'accounts' and what happens when it is omitted (scan all accounts). This goes well beyond the bare schema definition.

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

Purpose4/5

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

The description clearly states it generates a Top 10 leaderboard card and ranks qualified accounts by ROI%, giving a specific verb, resource, and ranking logic. It doesn't explicitly differentiate from similar siblings like stats_card or leaderboard_entry, but the 'card' and 'Top 10' language makes the main purpose distinct enough.

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

Usage Guidelines3/5

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

It gives useful usage context for the 'accounts' parameter (comma-separated filter vs. all accounts), and the '10+ trades' qualification defines the target population. However, it does not explain when to prefer this tool over siblings like leaderboard_entry or stats_card, leaving tool-selection guidance implicit.

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

leaderboard_entryC

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states it 'generates' an entry and returns JSON, but it does not disclose whether this is a read-only computation or if it writes to a leaderboard, whether authentication is required, or any side effects. The term 'verifiable' suggests some kind of certification but is not explained. This leaves significant ambiguity about the tool's behavior.

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

Conciseness4/5

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

The description is relatively concise, consisting of three sentences. It front-loads the primary purpose and then lists the output fields in a structured way. It avoids unnecessary verbosity and is easy to scan. The only minor issue is the vague 'ranking and PK' phrase, but overall structure is good.

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

Completeness3/5

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

The tool is simple (one optional parameter, with an output schema), and the description lists the expected return fields. However, it lacks prerequisites (e.g., does the account need to exist?), error handling, and clarification on whether it writes to storage. Given the ambiguity around behavior and usage, it is not fully complete for an agent to invoke accurately without further information.

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

Parameters2/5

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

The schema has one parameter, 'account', with no description (coverage 0%). The tool description does not mention this parameter at all, so it adds no meaning beyond the parameter name itself. Since schema coverage is 0%, the description should compensate but fails to explain what 'account' refers to or how it affects the output. This is a clear gap.

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

Purpose4/5

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

The description clearly states the tool's purpose: 'Generate a verifiable leaderboard entry for ranking and PK.' It identifies the resource (leaderboard entry) and the action (generate), and lists the output fields. It is not a tautology and conveys a specific function, though it does not explicitly distinguish itself from sibling tools like leaderboard_card or pk_card.

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

Usage Guidelines2/5

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

The description does not provide any explicit guidance on when to use this tool versus alternatives. It mentions 'Designed for fair comparison,' which hints at a use case, but it never states exclusions, alternatives, or conditions. An agent would have to infer when this is appropriate, so the guidance is largely absent.

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

list_marketsC

List active Polymarket markets sorted by volume or liquidity.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
sort_byNovolume

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden of behavioral disclosure. It mentions that only active markets are listed and that sorting is by volume or liquidity, but it does not disclose pagination behavior, default limit handling, authentication needs, rate limits, or the read-only nature of the operation. Significant behavioral context is missing.

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

Conciseness4/5

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

The description is a single, efficient sentence with no wasted words. The verb and resource are front-loaded, and it conveys the core information compactly, though at the cost of missing important details.

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

Completeness3/5

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

An output schema exists, so return-value details are covered. The description is minimally adequate for a simple list operation, but it leaves gaps around usage context, parameter details, and how this tool relates to siblings, making it incomplete for an agent deciding between list and search tools.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It partially clarifies the sort_by parameter by naming 'volume or liquidity', but it does not enumerate exact accepted values and says nothing about the limit parameter's intended semantics. The compensation is incomplete.

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

Purpose4/5

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

The description clearly states the action ('List') and the resource ('active Polymarket markets') plus the two sorting options. It is not a tautology and conveys the core function, but it does not explicitly distinguish itself from sibling tools like search_markets or get_markets_by_tag, so it lacks full differentiation.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as search_markets, get_market, or get_markets_by_tag. It simply states what it does, with no conditions, exclusions, or context to help an agent choose correctly.

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

list_ordersC

List all pending limit orders.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. 'List' implies a read-only operation, but the description does not state account scoping, ordering, pagination, or whether 'all' means all accounts or all orders within the default account.

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

Conciseness4/5

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

The description is a single front-loaded sentence with no filler words, which is concise. It sacrifices needed semantic detail but remains appropriately terse for such a simple operation.

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

Completeness2/5

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

While an output schema exists to document return values, the description still leaves critical invocation context missing: no account semantics, no mention of the optional parameter, and no relationship to sibling order-management tools. For a tool with one optional parameter, this is below minimum viable completeness.

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

Parameters1/5

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 compensate by explaining the 'account' parameter. In fact, saying 'all pending limit orders' while exposing an account parameter creates ambiguity: an agent cannot tell whether the account parameter filters the list or whether 'all' is truly global.

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

Purpose4/5

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

The description uses a specific verb ('List') with a clear resource and scope: 'all pending limit orders.' This is unambiguous about what the tool does. However, it does not explicitly differentiate itself from sibling tools like check_orders, which could plausibly overlap.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool instead of alternatives. It does not mention check_orders, cancel_all_orders, or any other sibling as a comparison, leaving the agent to infer placement 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.

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

ParametersJSON Schema
NameRequiredDescriptionDefault
name_aNoplayer_a
name_bNoplayer_b
balanceNo
strategy_aYes
strategy_bYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses the key behavioral trait: both strategies start with the same balance and run independently, then results are compared with a PK card. However, it does not disclose side effects (e.g., does it mutate account state? does it place real orders?), which is important given sibling tools like buy/sell/reset_account. The description adds some behavioral context but not enough for a tool that likely executes strategies.

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

Conciseness4/5

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

The description is compact and front-loaded with the core purpose. The parameter explanations are brief and useful. It could be slightly more structured (e.g., separating parameter docs from the main description), but it earns its place with no filler.

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

Completeness3/5

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

The tool has an output schema (not shown), which reduces the need to explain return values. However, for a tool that runs strategies, the description lacks critical context: does it execute real trades or simulate? Does it require an initialized account? What happens on strategy errors? Given the sibling set includes backtest and real trading tools, this ambiguity is a meaningful gap.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains strategy_a/b as dotted Python paths with an example, and name_a/b as display names for the PK card. It does not explain the 'balance' parameter, but the description mentions 'Both start with the same balance,' which implies its meaning. This is decent compensation for a 0% coverage schema, though balance could be more explicit.

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

Purpose4/5

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

The description clearly states the tool's function: run two strategies head-to-head in a PK battle, starting with the same balance, comparing results, and announcing a winner. It distinguishes itself from siblings like backtest (single strategy) and pk_card (likely just displays a card) by describing the head-to-head comparison flow.

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

Usage Guidelines3/5

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

The description implies usage: provide two strategies and optional names/balance. It does not explicitly state when to use this vs alternatives like backtest or resolve, nor does it mention prerequisites (e.g., strategies must be importable Python paths). The context is clear enough for a simple head-to-head comparison, but no exclusions or alternative routing are given.

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

pk_cardA

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
account_aNodefault
account_bNoaggressive

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It does state the tool 'outputs a tweet-ready card' and lists compared metrics, implying no account mutation, but it never explicitly says it is non-destructive, requires no authentication, or what side effects (if any) exist.

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

Conciseness5/5

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

Four concise sentences front-load the primary action, followed by metrics, output, and intended use. No filler or repetition.

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

Completeness3/5

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

For a simple two-parameter tool with an output schema, the description covers the main purpose, metrics, output, and use case. However, it omits parameter sourcing and any side-effect clarification, leaving an agent to infer prerequisites from sibling tools.

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

Parameters2/5

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

Schema description coverage is 0%, so the description needed to document account_a and account_b. It only restates that there are 'two accounts,' which adds little beyond the property names and titles; it does not explain identifier format, where to obtain valid account IDs, or the meaning of the defaults.

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

Purpose5/5

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

The description opens with a specific action and resource: 'Generate a head-to-head PK comparison card between two accounts.' It then lists the exact metrics compared and the output type, making the tool's purpose concrete and distinguishable from sibling stats/leaderboard tools.

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

Usage Guidelines3/5

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

The line 'Great for rivalry and sharing' gives a soft context cue for when the card is appropriate, but it does not explain when to choose this over pk_battle, leaderboard_card, or stats_card, nor does it mention prerequisites like needing initialized accounts.

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

place_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")

ParametersJSON Schema
NameRequiredDescriptionDefault
sideYes
amountYes
accountNodefault
outcomeYes
expires_atNo
order_typeNogtc
slug_or_idYes
limit_priceYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It usefully discloses order lifecycle behavior, order_type semantics, and the conditional requirement for expires_at. However, it omits other behaviors such as what the response is, whether the order consumes account funds immediately, or how it interacts with cancellation tools.

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

Conciseness5/5

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

The description is compact, front-loaded with the core purpose, and uses a clean parameter list with no filler. Each line adds useful information, and the conditional relationship between order_type and expires_at is expressed concisely.

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

Completeness2/5

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

For an 8-parameter tool with no annotations and zero schema-level parameter descriptions, the description is incomplete. It explains some parameters but omits key required fields like slug_or_id and outcome, and does not describe return values or post-order behavior, leaving an agent without enough context to reliably invoke the tool.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It does add meaning for side, limit_price, order_type, and expires_at, including the price range and the conditional requirement. However, it leaves several required parameters (slug_or_id, outcome, amount) and account unexplained, so coverage is only partial.

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

Purpose4/5

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

The description states a specific action ('Place a limit order') and its key behavior ('stays open until filled or cancelled/expired'), making the tool's purpose clear. However, it does not explicitly distinguish itself from sibling tools like buy or sell, though the 'limit order' terminology largely implies the difference.

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

Usage Guidelines3/5

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

The description implies when to use this tool: when a resting limit order is desired rather than an immediate market order. It does not provide explicit guidance about when not to use it or how it compares with the buy/sell siblings, leaving much of that decision to the agent's inference.

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

portfolioB

Get all open positions with live prices and unrealized P&L.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the action ('Get') and the data returned, but does not disclose whether the operation is read-only, any side effects, error conditions, or limitations (e.g., pagination, rate limits). The description is minimal and lacks transparency beyond the basic action.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the primary action and resource. There is no redundant information or filler. It is efficient and to the point.

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

Completeness3/5

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

The tool is simple, and there is an output schema (not shown) that likely covers the return format. However, the description does not explain the 'account' parameter, nor does it provide any usage context or prerequisites. It is adequate for a basic getter but leaves the parameter undefined and omits any edge-case or error behavior, making it only partially complete.

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

Parameters1/5

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

The schema has one optional parameter 'account' with a default, but the description does not mention it at all. With 0% schema description coverage, the description must explain the parameter's meaning, but it fails to do so. 'Account' is ambiguous (e.g., account ID, account type) and the agent has no guidance on how to use it or what values are valid.

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

Purpose5/5

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

The description clearly states a specific action ('Get') on a specific resource ('all open positions') with additional detail ('live prices and unrealized P&L'). It is distinct from sibling tools like buy/sell/history, which involve trading actions, whereas this is a read-only portfolio view. The purpose is immediately unambiguous.

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

Usage Guidelines3/5

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

The description implies that this tool is for viewing open positions, but it does not explicitly state when to use it versus alternatives like get_balance or history. There is no mention of exclusions or conditions. The usage context is inferred from the name and description, but no direct guidance is provided.

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

reset_accountA

Reset account — deletes all trades, positions, and balance.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explicitly states the destructive effect: deletes all trades, positions, and balance. It does not mention reversibility, permissions, or post-reset account state, but the core destructive behavior is clearly conveyed.

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

Conciseness5/5

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

A single sentence that is front-loaded with the action and resource, followed immediately by the most important behavioral consequence. There is no filler or redundant restatement.

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

Completeness3/5

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

The tool is simple with one optional parameter and an output schema, and the description covers the essential destructive effect. However, it omits usage context and what happens to the account after reset, leaving a moderate gap for a destructive operation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate for the undocumented 'account' parameter. It does not add any meaning beyond the parameter name and default value, though the tool name weakly implies the account parameter identifies which account to reset.

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

Purpose5/5

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

The description uses a specific verb and resource ('Reset account') and explicitly enumerates what gets deleted: all trades, positions, and balance. This clearly distinguishes it from siblings like init_account, buy, and sell.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives such as init_account, nor are any prerequisites or exclusions mentioned. The usage context is only implied by the word 'Reset'.

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

resolveB

Resolve a market's positions, paying out $1/share for winning outcome.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault
slug_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It does state a concrete behavior: positions are resolved and winners receive $1/share. However, it does not disclose that resolution is likely irreversible/final, whether authorization is required, or what happens to losing or partially resolved positions.

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

Conciseness5/5

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

One clean sentence with no redundant words; the action and core outcome are front-loaded.

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

Completeness2/5

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

Despite having an output schema (which covers return values), the description omits important context for a financially mutating tool: it doesn't say the action is final, who may call it, how it interacts with account balances/portfolio, or when it should not be repeated. The agent is left to guess at operational consequences.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters, but it only implies that 'slug_or_id' identifies the market. It says nothing about the 'account' parameter, its default/semantics, or how a slug or ID should be formatted.

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

Purpose5/5

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

The description uses a specific verb ('Resolve'), targets 'a market's positions', and specifies the financial outcome ('paying out $1/share for winning outcome'). The singular 'a market' also sets it apart from the sibling resolve_all.

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

Usage Guidelines2/5

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

There is no guidance about when to call this tool versus resolve_all, buy, sell, or other settlement tools. No preconditions, permissions, or 'when not to use' information is provided; the agent must infer from the name.

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

resolve_allC

Resolve all open positions in closed/resolved markets.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It states the action but does not mention irreversibility, side effects on account balances, permission requirements, or what happens to positions that cannot be resolved.

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

Conciseness4/5

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

The description is one concise sentence with no filler, and the core action is front-loaded. It could be slightly clearer about the market-status qualifier, but it is appropriately sized.

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

Completeness2/5

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

An output schema exists, so return format is covered, but the tool is a mutating bulk operation with no annotations, no usage context, and an undocumented parameter. The description leaves out side effects, account semantics, and when to prefer this over 'resolve'.

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

Parameters2/5

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

The schema has 0% description coverage, and the description does not mention the 'account' parameter at all. The agent must infer its meaning from the title and default value, which is not sufficient compensation for the coverage gap.

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

Purpose4/5

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

The description names a specific verb ('Resolve') and a clear target ('all open positions') with a scope qualifier ('in closed/resolved markets'). It distinguishes itself from the sibling 'resolve' by indicating a bulk operation, though the phrase 'closed/resolved markets' is slightly ambiguous.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus the singular 'resolve' sibling. The tool name and description imply bulk resolution, but there is no explicit 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.

search_marketsC

Search Polymarket for markets matching a query string.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description must disclose behavioral traits itself. It only says 'Search', which suggests a read-only operation, but does not mention authentication, rate limits, result pagination, or any side effects. The agent cannot infer important behavioral constraints from this text.

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

Conciseness4/5

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

The description is a single, tightly-worded sentence with no filler. It front-loads the primary purpose. While it is minimal, it is not wordy, and the brevity is appropriate for a simple search operation.

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

Completeness2/5

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

Even with an output schema present, the description leaves the agent without guidance on query semantics, result ordering, or how 'limit' behaves. Given the absence of annotations, the overall tool definition is too thin to ensure correct invocation beyond what the schema already states.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate by explaining both parameters. It only rephrases 'query' as 'query string' and says nothing about 'limit', its default, or how the matching behaves. This is insufficient for a tool with two parameters.

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

Purpose4/5

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

The description names a specific verb ('Search'), resource ('Polymarket markets'), and condition ('matching a query string'), clearly stating what the tool does. It does not explicitly differentiate from sibling tools like list_markets, but the query-based focus is enough to infer its role.

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

Usage Guidelines3/5

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

The description implies when to use the tool ('when you have a query string to search markets') and provides context, but it does not mention when not to use it or point to alternatives such as list_markets for browsing all markets. This is acceptable but leaves routing partially to the agent.

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

sellB

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
sharesYes
accountNodefault
outcomeYes
order_typeNofok
slug_or_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that sales execute at best available prices and explains order_type options (fok vs fak) including partial fill behavior. However, it omits details about potential failures, account requirements, or impact on portfolio. Some behavioral transparency exists but is incomplete.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose and immediately adding the key order_type detail. There is no fluff or redundancy; every sentence earns its place. It is appropriately concise for the tool's complexity.

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

Completeness2/5

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

The description is incomplete for a 5-parameter tool with no annotations and no schema descriptions. It does not explain account usage, outcome validity, slug_or_id requirements, or behavior on failed orders. Although an output schema exists, the description still lacks essential operational context for correct invocation.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must explain parameters. It only explains order_type, providing its two possible values and their meaning. It does not describe shares, account, outcome, or slug_or_id, which remain undocumented. This adds minimal value beyond the schema, insufficient for the coverage gap.

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

Purpose5/5

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

The description clearly states the tool sells shares in a Polymarket outcome, with a specific verb and resource. It also notes 'at best available prices', distinguishing it from limit-order tools like place_limit_order. The purpose is unambiguous and distinguishable from sibling tools like buy.

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

Usage Guidelines2/5

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

The description does not explicitly state when to use this tool versus alternatives. It implies a market-order behavior but does not mention conditions such as when to use buy instead, or when to prefer a limit order. No exclusions or alternative routing are provided, leaving the agent to infer usage context.

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

share_contentA

Generate shareable content optimized for a specific platform and template.

platform: "twitter" (X), "telegram", "discord", "plain" template: "performance" (stats overview), "milestone" (achievement), "daily" (daily report with positions)

Each platform gets appropriately formatted content with hashtags and install CTA.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault
platformNotwitter
templateNoperformance

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry the disclosure burden. It does reveal the output behavior (platform-specific formatting, hashtags, install CTA), but it does not state the side-effect profile (read-only content generation, no account mutations) or mention prerequisites/error conditions involving the account parameter.

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

Conciseness5/5

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

The description is appropriately short: a one-sentence purpose, a compact enum-style list, and a final behavioral note. Information is front-loaded and there is no filler.

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

Completeness3/5

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

Given the low schema coverage and absent annotations, the description is mostly sufficient for platform/template selection and expected output. The role of 'account' is unexplained, and there is no guidance directing agents away from sibling card-generation tools when appropriate.

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

Parameters4/5

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

Schema coverage is 0%, and the description compensates by defining valid platform values and template meanings. The 'account' parameter remains undefined, which is the only notable semantic gap.

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

Purpose4/5

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

The description uses a specific verb ('Generate') and a clear resource ('shareable content') constrained by platform and template, and enumerates all supported values. It does not explicitly contrast with card-generation siblings like leaderboard_card or stats_card, so it stops short of full differentiation.

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

Usage Guidelines4/5

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

It clearly identifies the use case: producing shareable, platform-formatted posts with hashtags and an install CTA. It does not list exclusion criteria or name alternatives such as the card tools, but the intended context is unambiguous.

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

statsC

Get performance analytics: win rate, ROI, profit, max drawdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states 'Get performance analytics' without explicitly indicating if the operation is read-only, whether it has side effects, requires authentication, or has any limitations. While 'Get' implies a read, this is not made explicit, and no other behavioral traits are disclosed.

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

Conciseness5/5

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

The description is a single sentence that is concise, front-loaded with the core operation, and contains no redundant or filler content. Every word earns its place, making it an exemplar of conciseness.

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

Completeness2/5

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

Despite having an output schema (which means return values need not be described), the description omits any explanation of the 'account' parameter and provides no context relative to the many sibling tools. An agent cannot reliably determine when to use this over stats_card or portfolio, nor what to pass for a non-default account. The necessary context for correct invocation is incomplete.

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

Parameters1/5

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 'account' parameter at all. The parameter remains completely unexplained in both the description and the schema, leaving the agent without any clue about what values are valid or what the default 'default' refers to.

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

Purpose5/5

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

The description clearly states the operation ('Get performance analytics') and enumerates specific metrics (win rate, ROI, profit, max drawdown), making it distinct from sibling tools like portfolio, history, and get_balance. It is a specific verb+resource statement that leaves no ambiguity about what the tool does.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisite conditions, or indicate that certain sibling tools (e.g., stats_card, portfolio) might be more appropriate in specific scenarios. The agent is left to infer usage from the description alone.

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

stats_cardA

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown
accountNodefault

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the disclosure burden. It does reveal that the tool returns a formatted card and how the format parameter changes output. However, it does not state that the operation is read-only, whether it depends on an existing account, or any side effects/requirements, leaving some behavioral ambiguity.

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

Conciseness5/5

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

The description is compact and front-loaded: the core purpose comes first, followed by output content and the only parameter that needs elaboration. Every sentence adds information without repetition.

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

Completeness3/5

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

The tool is simple enough that this is mostly adequate — output contents, format behavior, and sharing context are covered. The main completeness gaps are the undocumented account parameter and the lack of explicit read-only/non-mutating behavior, especially because no annotations are provided.

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

Parameters3/5

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

The structure has 0% schema coverage, so the description must document parameters. It fully documents format with allowed values and their meanings, but account is only surfaced through the schema title and default; its meaning and effect are not described.

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

Purpose4/5

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

The description clearly states the action ('Get a shareable stats card') and the resource (a formatted card showing ROI, Sharpe, win rate, and P&L). It does not explicitly differentiate from sibling tools like leaderboard_card or pk_card, so it misses the top score for sibling distinction.

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

Usage Guidelines4/5

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

It establishes a clear context: producing a card ready to post on X, Telegram, Discord, etc., and lists the format options for those destinations. It gives no explicit 'when not to use' or comparison with alternatives such as share_content or leaderboard_card.

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

watch_pricesC

Watch live midpoint prices for one or more markets.

slugs: comma-separated market slugs or condition IDs outcomes: comma-separated outcomes (default: "yes")

ParametersJSON Schema
NameRequiredDescriptionDefault
slugsYes
outcomesNoyes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior1/5

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

With no annotations, the description alone must disclose behavioral traits. It only says 'Watch live midpoint prices' but does not explain whether this is a one-time fetch or a live subscription, whether it has side effects, if authentication is required, or any rate limits. The agent gets no meaningful behavioral context beyond the literal action.

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

Conciseness5/5

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

The description is extremely concise with no filler. The core purpose is front-loaded, and parameter explanations are minimal but necessary. Each sentence serves a purpose.

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

Completeness3/5

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

The tool is simple with only two parameters, and an output schema exists (though not shown). The description explains the parameters but lacks context on when to invoke it, expected behavior, or return format nuances. For a simple observation tool, it is minimally adequate but leaves gaps in usage guidance.

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

Parameters3/5

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

Schema coverage is 0%, so the description must compensate. It explains that 'slugs' are comma-separated market slugs or condition IDs, and 'outcomes' are comma-separated outcomes with a default. This adds meaning beyond the parameter names, though it does not detail acceptable values or edge cases.

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

Purpose4/5

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

The description states a clear action ('Watch live midpoint prices') and resource ('one or more markets'), which is specific and understandable. It does not explicitly differentiate from sibling tools, but the tool name and description make its purpose self-evident among buy/sell/portfolio tools.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or contexts. There is no indication of when to prefer watch_prices over other price-related tools like get_market or get_order_book.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 30 tool updatesv0.4.1
    • First observedbacktest
    • First observedbuy
    • First observedcancel_all_orders
    • First observedcancel_order
    • First observedcheck_orders
    • First observedget_balance
    • First observedget_event
    • First observedget_market
    • First observedget_markets_by_tag
    • First observedget_order_book
    • First observedget_tags
    • First observedhistory
    • First observedinit_account
    • First observedleaderboard_card
    • First observedleaderboard_entry
    • First observedlist_markets
    • First observedlist_orders
    • First observedpk_battle
    • First observedpk_card
    • First observedplace_limit_order
    • First observedportfolio
    • First observedreset_account
    • First observedresolve
    • First observedresolve_all
    • First observedsearch_markets
    • First observedsell
    • First observedshare_content
    • First observedstats
    • First observedstats_card
    • First observedwatch_prices

TDQS

B3/5.0

Scored across 30 tools

Disambiguation3/5

Core trading tools are mostly distinct, but there is real overlap between get_balance and portfolio (both surface positions and P&L), and the cluster of stats_card, leaderboard_card, pk_card, leaderboard_entry, and share_content all produce shareable performance content. Descriptions help, but an agent could easily choose the wrong analytics/presentation tool.

Naming Consistency3/5

There are consistent subfamilies like get_market/get_order_book/get_event and list_orders/cancel_order/cancel_all_orders, but the overall set mixes bare verbs (buy, sell, resolve), nouns (portfolio, history, stats), and noun_noun compounds (leaderboard_card, pk_battle). No single naming convention governs the full surface.

Tool Count2/5

With 30 tools, the server is over-scoped for a paper trading tool; many of the card/share/leaderboard tools could be consolidated into fewer general-purpose tools. The core trading functionality is solid, but the surface feels padded with social and vanity-format variants.

Completeness4/5

The paper trading lifecycle is well covered: account init/reset/balance, market data, market orders, limit orders, positions/history, resolution, and backtesting. Minor gaps exist such as no deposit/withdraw or order modification, but agents can complete real trading workflows without dead ends.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides 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
  • A
    license
    B
    quality
    D
    maintenance
    Enables LLM agents to interact with Polymarket prediction markets, including market discovery, real-time pricing, analytics, account management, and trading with built-in safety guards.
    34
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables 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