Skip to main content
Glama
enderekici

Trading 212 MCP Server

by enderekici

Trading 212 MCP Server

CI Docker Node.js TypeScript MCP License

A comprehensive Model Context Protocol (MCP) server for seamless integration with the Trading 212 API. This server enables AI assistants like Claude to interact with your Trading 212 investment account, providing full access to account management, portfolio tracking, order execution, and historical data analysis.

Deployment Options:

  • Local installation with Node.js

  • Docker container (production-ready)

  • Docker Compose for easy orchestration

Features

🏦 Account Management

  • Get account information (currency, ID)

  • View cash balances (free, invested, blocked, total)

  • Retrieve comprehensive account summaries

📊 Portfolio Management

  • List all open positions

  • Get detailed position information by ticker

  • Real-time profit/loss tracking

📈 Order Management

  • View all active orders

  • Place market, limit, stop, and stop-limit orders

  • Cancel pending orders

  • Support for DAY and GTC (Good Till Cancelled) orders

  • Extended hours trading support

🔍 Market Data & Instruments

  • Search and filter thousands of tradeable instruments

  • Access instrument metadata (ISIN, currency, type, trading schedules)

  • View exchange information and trading hours

🥧 Investment Pies

  • List all investment pies (portfolio buckets)

  • Create new pies with custom allocations

  • Update and delete existing pies

  • Configure dividend reinvestment settings

📜 Historical Data

  • Access order history with pagination

  • Retrieve dividend payment records

  • View complete transaction history

  • Export data to CSV for specified time periods

⚡ Performance & Observability

  • Automatic rate limit tracking and headers

  • Zod schema validation for type safety

  • Comprehensive error handling with custom error classes

  • Production-grade structured logging (Pino)

  • Support for both demo and live environments

  • Debug mode for API request/response inspection

Related MCP server: Trading212 MCP Server

Installation

Prerequisites

  • Node.js 24+ installed

  • Trading 212 account (Invest or ISA)

  • Trading 212 API key (see Setup Guide)

The easiest way to deploy the MCP server is using Docker:

# Clone the repository
git clone https://github.com/enderekici/trading212-mcp.git
cd trading212-mcp

# Create .env file with your API key
echo "TRADING212_API_KEY=your_api_key_here" > .env
echo "TRADING212_ENVIRONMENT=demo" >> .env

# Start with Docker Compose
docker-compose up -d

See DOCKER.md for comprehensive Docker deployment guide.

Option 2: Local Installation

Install and build from source:

# Install dependencies
npm install

# Build the project
npm run build

Configuration

Getting Your API Key

  1. Open the Trading 212 app (mobile or web)

  2. Navigate to SettingsAPI (Beta)

  3. Click Generate API Key

  4. Configure permissions:

    • Account data (read) - View account information

    • History (read) - Access historical data

    • Orders (read/write) - View and place orders

    • Portfolio (read) - View positions

  5. (Optional) Set IP address whitelist for additional security

  6. Copy your API key and store it securely

⚠️ Security Warning: Never commit your API key to version control or share it publicly.

Environment Variables

Create a .env file in the project root:

# Required: Your Trading 212 API key
TRADING212_API_KEY=your_api_key_here

# Optional: Environment (demo or live), defaults to demo
TRADING212_ENVIRONMENT=demo

# Optional: Log level (trace, debug, info, warn, error, fatal), defaults to info
LOG_LEVEL=info

# Optional: Node environment (development or production), defaults to development
NODE_ENV=development

Environments:

  • demo - Paper trading environment (recommended for testing)

    • API Base URL: https://demo.trading212.com/api/v0

    • Uses paper trading account (no real money)

    • Safe for testing and development

    • Default value if not specified

  • live - Real money trading environment

    • API Base URL: https://live.trading212.com/api/v0

    • Uses real money trading account

    • Use with caution

⚠️ Important: Your API key is environment-specific. A demo API key only works with TRADING212_ENVIRONMENT=demo, and a live API key only works with TRADING212_ENVIRONMENT=live. You cannot mix them.

📖 For detailed information about environments, see ENVIRONMENTS.md

Log Levels:

  • trace - Most verbose, logs every detail

  • debug - Detailed logs including API requests, rate limits, and debug info

  • info - Standard operation logs (default, recommended)

  • warn - Only warnings and errors

  • error - Only errors

  • fatal - Only fatal errors

Node Environment:

  • development - Pretty-printed colored logs (human-readable)

  • production - JSON logs (for structured logging systems)

MCP Integration

This server works with any MCP-compatible client. It supports two transports:

Transport

Use when

Start command

stdio

Client spawns the process

trading212-mcp or node dist/index.js

Streamable HTTP

Server runs separately

trading212-mcp --http (serves at http://localhost:3012/mcp)

Claude Desktop

Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

Stdio (recommended):

{
  "mcpServers": {
    "trading212": {
      "command": "trading212-mcp",
      "env": {
        "TRADING212_API_KEY": "your_api_key_here",
        "TRADING212_ENVIRONMENT": "demo"
      }
    }
  }
}

HTTP (start server first with trading212-mcp --http):

{
  "mcpServers": {
    "trading212": {
      "url": "http://localhost:3012/mcp"
    }
  }
}

Docker (stdio):

{
  "mcpServers": {
    "trading212": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "TRADING212_API_KEY=your_api_key_here",
        "-e", "TRADING212_ENVIRONMENT=demo",
        "trading212-mcp:latest"
      ]
    }
  }
}

Claude Code

Add to .claude/settings.json or run claude mcp add:

Stdio:

{
  "mcpServers": {
    "trading212": {
      "command": "trading212-mcp",
      "env": {
        "TRADING212_API_KEY": "your_api_key_here",
        "TRADING212_ENVIRONMENT": "demo"
      }
    }
  }
}

HTTP (start server first):

{
  "mcpServers": {
    "trading212": {
      "url": "http://localhost:3012/mcp"
    }
  }
}

Cursor

Add to Cursor's MCP settings (Settings > MCP Servers > Add):

{
  "mcpServers": {
    "trading212": {
      "command": "trading212-mcp",
      "env": {
        "TRADING212_API_KEY": "your_api_key_here",
        "TRADING212_ENVIRONMENT": "demo"
      }
    }
  }
}

Windsurf

Add to ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "trading212": {
      "command": "trading212-mcp",
      "env": {
        "TRADING212_API_KEY": "your_api_key_here",
        "TRADING212_ENVIRONMENT": "demo"
      }
    }
  }
}

VS Code (Copilot)

Add to .vscode/mcp.json in your workspace or user settings:

{
  "servers": {
    "trading212": {
      "command": "trading212-mcp",
      "env": {
        "TRADING212_API_KEY": "your_api_key_here",
        "TRADING212_ENVIRONMENT": "demo"
      }
    }
  }
}

Gemini CLI

Add to ~/.gemini/settings.json:

{
  "mcpServers": {
    "trading212": {
      "command": "trading212-mcp",
      "env": {
        "TRADING212_API_KEY": "your_api_key_here",
        "TRADING212_ENVIRONMENT": "demo"
      }
    }
  }
}

OpenAI Codex CLI

Add to ~/.codex/config.json:

{
  "mcpServers": {
    "trading212": {
      "command": "trading212-mcp",
      "env": {
        "TRADING212_API_KEY": "your_api_key_here",
        "TRADING212_ENVIRONMENT": "demo"
      }
    }
  }
}

Any MCP-Compatible Client

For stdio, point your client at the trading212-mcp command (or node dist/index.js) with the required env vars. For HTTP, start the server first (trading212-mcp --http --port 3012) and point your client at http://localhost:3012/mcp.

Setup Methods Comparison

Method

Pros

Cons

Best For

Global npm

Fast, simple

Requires Node.js installed

Most users

Docker (stdio)

Isolated, consistent

Slightly slower startup (~2s)

Production, teams

HTTP transport

Decoupled, shareable

Must start server separately

Remote, multi-client

Local build

Full control

Manual updates

Contributors

See DOCKER.md for advanced Docker deployment options including persistent containers.

Available Tools

Account Management

get_account_info

Retrieve account metadata including currency code and account ID.

Example:

Get my account information

get_account_cash

Get detailed cash balance information.

Returns: Free cash, total, invested, blocked amounts, and more.

Example:

How much cash do I have available?

get_account_summary

Get comprehensive account summary with all balances and P&L.

Example:

Show me my complete account summary

Portfolio Management

get_portfolio

List all open positions with current values and profit/loss.

Example:

What stocks do I own?

get_position

Get detailed information about a specific position.

Parameters:

  • ticker (string, required) - The ticker symbol (e.g., "AAPL", "TSLA")

Example:

Show me my Apple position details

Order Management

get_orders

Retrieve all active orders.

Example:

What are my pending orders?

get_order

Get detailed information about a specific order.

Parameters:

  • orderId (number, required) - The order ID

Example:

Show me details for order 12345

cancel_order

Cancel an active order.

Parameters:

  • orderId (number, required) - The order ID to cancel

Example:

Cancel order 12345

place_market_order

Place a market order to execute immediately at the current market price.

Parameters:

  • ticker (string, required) - Ticker symbol

  • quantity (number, required) - Quantity to buy (positive) or sell (negative)

  • timeValidity (string, optional) - "DAY" or "GTC" (default: "DAY")

Example:

Buy 10 shares of Apple at market price

place_limit_order

Place a limit order to execute at a specified price or better.

Parameters:

  • ticker (string, required) - Ticker symbol

  • quantity (number, required) - Quantity to buy/sell

  • limitPrice (number, required) - Maximum buy price or minimum sell price

  • timeValidity (string, optional) - "DAY" or "GTC"

Example:

Place a limit order to buy 5 shares of Tesla at $200

place_stop_order

Place a stop order that becomes a market order when triggered.

Parameters:

  • ticker (string, required) - Ticker symbol

  • quantity (number, required) - Quantity to buy/sell

  • stopPrice (number, required) - Price that triggers the order

  • timeValidity (string, optional) - "DAY" or "GTC"

Example:

Place a stop order to sell 10 shares of MSFT if price drops below $300

place_stop_limit_order

Place a stop-limit order that becomes a limit order when triggered.

Parameters:

  • ticker (string, required) - Ticker symbol

  • quantity (number, required) - Quantity to buy/sell

  • stopPrice (number, required) - Price that triggers the order

  • limitPrice (number, required) - Limit price once triggered

  • timeValidity (string, optional) - "DAY" or "GTC"

Example:

Place a stop-limit order to sell GOOGL at $140 with stop at $145

Instruments & Market Data

get_instruments

List all tradeable instruments with optional search filtering.

Parameters:

  • search (string, optional) - Filter by ticker, name, or ISIN

Example:

Search for all Apple instruments

get_exchanges

Get information about exchanges and trading schedules.

Example:

Show me exchange trading hours

Investment Pies

get_pies

List all investment pies with their configurations.

Example:

Show me all my pies

get_pie

Get detailed information about a specific pie.

Parameters:

  • pieId (number, required) - The pie ID

Example:

Show details for pie 123

create_pie

Create a new investment pie.

Parameters:

  • name (string, required) - Pie name (1-50 characters)

  • icon (string, required) - Icon identifier

  • instrumentShares (object, required) - Ticker to allocation mapping

  • dividendCashAction (string, required) - "REINVEST" or "TO_ACCOUNT_CASH"

  • goal (number, optional) - Investment goal amount

Example:

Create a new pie called "Tech Portfolio" with 50% AAPL and 50% GOOGL, reinvesting dividends

update_pie

Update an existing pie configuration.

Parameters:

  • pieId (number, required) - The pie ID

  • Other parameters same as create_pie (all optional)

Example:

Update pie 123 to change allocation to 60% AAPL and 40% GOOGL

delete_pie

Delete an investment pie.

Parameters:

  • pieId (number, required) - The pie ID to delete

Example:

Delete pie 123

Historical Data

get_order_history

Get historical orders with pagination support.

Parameters:

  • cursor (number, optional) - Pagination cursor

  • limit (number, optional) - Results per page (default: 50)

  • ticker (string, optional) - Filter by ticker

Example:

Show me my order history for the last month

get_dividends

Get dividend payment history.

Parameters:

  • cursor (number, optional) - Pagination cursor

  • limit (number, optional) - Results per page

  • ticker (string, optional) - Filter by ticker

Example:

Show me all dividends received this year

get_transactions

Get complete transaction history.

Parameters:

  • cursor (number, optional) - Pagination cursor

  • limit (number, optional) - Results per page

Example:

Show me my recent transactions

request_export

Request a CSV export of account data.

Parameters:

  • timeFrom (string, required) - Start date (ISO 8601 format)

  • timeTo (string, required) - End date (ISO 8601 format)

  • includeDividends (boolean, optional) - Include dividends (default: true)

  • includeInterest (boolean, optional) - Include interest (default: true)

  • includeOrders (boolean, optional) - Include orders (default: true)

  • includeTransactions (boolean, optional) - Include transactions (default: true)

Example:

Export all my data from January 1st to December 31st 2024

Example Conversations

Portfolio Analysis

User: What's my current portfolio performance?

Claude: Let me check your account summary and portfolio.
[Calls get_account_summary and get_portfolio]

You have a total portfolio value of $10,523.45 with an overall profit of $523.45 (+5.2%).

Your positions:
- AAPL: 10 shares at $150.00 (avg $145.00) - +$50.00 profit
- GOOGL: 5 shares at $140.00 (avg $135.00) - +$25.00 profit
- TSLA: 8 shares at $200.00 (avg $210.00) - -$80.00 loss

Order Placement

User: Buy 5 shares of Microsoft at market price

Claude: I'll place a market order for 5 shares of MSFT.
[Calls place_market_order]

Order placed successfully:
- Order ID: 12345
- Ticker: MSFT
- Quantity: 5
- Type: MARKET
- Status: CONFIRMED
- Filled at: $350.25 per share

Historical Analysis

User: How much have I received in dividends this year?

Claude: Let me check your dividend history.
[Calls get_dividends]

You've received $125.50 in dividends this year:
- AAPL: $45.00 (3 payments)
- MSFT: $50.50 (4 payments)
- JNJ: $30.00 (2 payments)

Rate Limits

Trading 212 API enforces rate limits on a per-endpoint basis. This MCP server automatically tracks rate limit information via response headers:

  • x-ratelimit-limit - Maximum requests allowed

  • x-ratelimit-remaining - Requests remaining

  • x-ratelimit-reset - Unix timestamp when limit resets

Known Limits:

  • Account Summary: 1 request / 5 seconds

  • Market Orders: 1 request / 2 seconds

  • Limit Orders: 1 request / 2 seconds

The server will throw an error if you exceed rate limits. Always check the error messages for rate limit information.

Error Handling

All errors are returned with descriptive messages:

{
  "error": "Trading 212 API Error (401): Invalid API key"
}

Common errors:

  • 401 Unauthorized - Invalid API key

  • 403 Forbidden - Insufficient permissions

  • 404 Not Found - Resource doesn't exist

  • 429 Too Many Requests - Rate limit exceeded

  • 500 Internal Server Error - Trading 212 service issue

Development

Run in Development Mode

npm run dev

Build for Production

npm run build

Watch Mode (Auto-rebuild)

npm run watch

API Documentation

For complete API documentation, visit:

Supported Account Types

  • Invest Accounts (General trading accounts)

  • ISA Accounts (UK tax-advantaged accounts)

  • CFD Accounts (Not supported by Trading 212 API)

Limitations

  • API is currently in BETA and under active development

  • No WebSocket/streaming support (REST only)

  • Pies API is deprecated and won't receive further updates

  • CFD accounts are not supported

  • Rate limits apply per account (not per API key)

Security Best Practices

  1. Never commit API keys to version control

  2. Use environment variables for sensitive configuration

  3. Enable IP whitelisting if possible

  4. Test in demo environment before using live

  5. Use minimal permissions needed for your use case

  6. Rotate API keys regularly

  7. Monitor API usage through rate limit headers

Logging and Debugging

The Trading 212 MCP server includes professional structured logging powered by Pino, providing production-grade observability and debugging capabilities.

Log Levels

Control logging verbosity with the LOG_LEVEL environment variable:

# Development - detailed logs
LOG_LEVEL=debug npm run dev

# Production - minimal logs
LOG_LEVEL=warn node dist/index.js

Available levels (from most to least verbose):

  • trace - Everything including internal details

  • debug - API requests, rate limits, detailed operations

  • info - Server startup, tool executions (default)

  • warn - Warnings and potential issues

  • error - Errors only

  • fatal - Fatal errors causing shutdown

Log Output Formats

Development mode (pretty-printed, colored):

NODE_ENV=development npm run dev

Example output:

[16:32:15.423] INFO: Starting Trading 212 MCP server
    environment: "demo"
    version: "1.0.0"
    nodeVersion: "v20.10.0"
    platform: "darwin"
    logLevel: "info"

Production mode (structured JSON):

NODE_ENV=production npm start

Example output:

{"level":"info","time":"2026-02-10T16:32:15.423Z","msg":"Starting Trading 212 MCP server","environment":"demo","version":"1.0.0"}

Debugging API Requests

Enable debug logging to see all API calls and rate limit info:

LOG_LEVEL=debug node dist/index.js

Debug logs include:

  • API request method and endpoint

  • Rate limit headers (limit, remaining, reset time)

  • Warnings when approaching rate limits

  • Request/response timing

  • Error details with context

Error Tracking

The server uses structured error classes for better debugging:

  • AuthError - API key issues (401)

  • ApiError - API request failures (4xx, 5xx)

  • RateLimitError - Rate limit exceeded (429)

  • ValidationError - Invalid request parameters (400)

All errors are logged with:

  • Error type and code

  • HTTP status code

  • Contextual information

  • Request details

  • Stack traces (in non-production)

Example Debug Session

# Enable detailed logging
export LOG_LEVEL=debug
export NODE_ENV=development

# Run the server
npm run dev

Look for these log entries:

[DEBUG] API request - Shows every API call
[DEBUG] Rate limit info - Track API quota usage
[WARN] Approaching rate limit - Proactive warnings
[ERROR] Tool execution failed - Detailed error context

Logging in Claude Desktop

When running through Claude Desktop, logs are written to stderr and can be viewed in:

macOS:

tail -f ~/Library/Logs/Claude/mcp*.log

Windows:

Get-Content "$env:APPDATA\Claude\Logs\mcp*.log" -Wait

Troubleshooting

Server Not Appearing in Claude Desktop

  1. Verify the path in claude_desktop_config.json is absolute

  2. Ensure the project is built (npm run build)

  3. Check that dist/index.js exists

  4. Restart Claude Desktop completely

  5. Check Claude Desktop logs for errors

Authentication Errors

  1. Verify API key is correct in .env or config

  2. Check that API key has required permissions

  3. Ensure you're using the correct environment (demo/live)

  4. Verify IP whitelist settings if enabled

Rate Limit Errors

  1. Wait for the rate limit window to reset

  2. Check x-ratelimit-reset header for reset time

  3. Reduce frequency of API calls

  4. Implement caching where appropriate

Contributing

Contributions are welcome! Please:

  1. Fork the repository

  2. Create a feature branch

  3. Make your changes with tests

  4. Submit a pull request

License

MIT License - see LICENSE file for details

Disclaimer

This is an unofficial integration. Always test thoroughly in the demo environment before using with real money. Trading involves risk, and you should only invest what you can afford to lose.

Support

For issues with this MCP server:

  • Open an issue on GitHub

For Trading 212 API issues:

Acknowledgments

Built with:


Made with ❤️ for the Trading 212 and AI community

Available Tools

23 tools
cancel_orderC

Cancel an active order by order ID

ParametersJSON Schema
NameRequiredDescriptionDefault
orderIdYesThe unique identifier of the order to cancel

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 full burden. It states 'Cancel an active order', implying a destructive mutation, but lacks details on permissions needed, side effects (e.g., fees, notifications), rate limits, or response behavior (e.g., confirmation message). This is a significant gap for a mutation tool.

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 with zero waste. It's front-loaded with the core purpose, making it easy to scan and understand quickly.

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?

Given the tool's complexity (a destructive mutation with no annotations and no output schema), the description is incomplete. It lacks behavioral details (e.g., what 'cancel' entails, error conditions), usage context, and output expectations, leaving gaps for an AI agent to invoke it correctly.

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 100%, with the parameter 'orderId' fully documented in the schema as 'The unique identifier of the order to cancel'. The description adds no additional meaning beyond this, such as format examples or constraints, so it meets the baseline for high schema coverage.

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 ('Cancel') and target resource ('an active order'), specifying it's done by order ID. It distinguishes from siblings like 'get_order' (read) and 'place_*' orders (create), but doesn't explicitly differentiate from other cancellation-related tools (none present in siblings).

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 on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., order must be active), exclusions (e.g., cannot cancel filled orders), or comparisons to other order-related tools like 'get_order' to check status first.

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

create_pieC

Create a new investment pie with specified instruments and allocations

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the pie (1-50 characters)
iconYesIcon identifier for the pie
instrumentSharesYesObject mapping ticker symbols to their percentage allocation (e.g., {"AAPL": 0.5, "GOOGL": 0.5})
dividendCashActionYesWhat to do with dividend cash
goalNoOptional investment goal amount

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 carries full burden for behavioral disclosure. It states this is a creation operation but doesn't mention whether this requires authentication, what permissions are needed, whether there are rate limits, what happens on success/failure, or if the creation is irreversible. For a tool that creates financial instruments, this is a significant gap in safety and operational context.

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 that gets straight to the point without unnecessary words. It's appropriately sized for a creation tool, though it could potentially benefit from being slightly more informative given the lack of annotations.

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 tool that creates financial investment instruments with 5 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what happens after creation, whether there are validation rules beyond schema constraints, how to handle errors, or what the user should expect as a result. The context signals show this is a non-trivial operation with nested objects and required parameters, warranting more comprehensive 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?

The description mentions 'specified instruments and allocations' which maps to the 'instrumentShares' parameter, but doesn't add meaningful context beyond what the schema already provides. With 100% schema description coverage, the baseline is 3 - the schema does the heavy lifting for parameter documentation, and the description doesn't compensate with additional semantic value.

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 ('Create a new investment pie') and specifies what it creates ('with specified instruments and allocations'), which is a specific verb+resource combination. However, it doesn't differentiate from sibling tools like 'update_pie' or explain what makes 'create' distinct from modification operations.

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 like 'update_pie' or when not to use it. There's no mention of prerequisites, dependencies, or appropriate contexts for creating versus retrieving pies using 'get_pie' or 'get_pies'.

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

delete_pieC

Delete an investment pie by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
pieIdYesThe unique identifier of the pie to delete

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 carries full burden for behavioral disclosure. It states the destructive action ('Delete') but lacks critical details: whether deletion is permanent or reversible, what permissions are required, if there are rate limits, or what happens to associated data. This is inadequate for a mutation tool with zero annotation coverage.

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 with zero waste. It's appropriately sized and front-loaded, directly stating the tool's purpose without unnecessary elaboration.

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?

Given this is a destructive mutation tool with no annotations and no output schema, the description is incomplete. It should explain behavioral aspects like permanence, permissions, or error conditions, but provides only basic purpose. The context signals indicate adequate schema coverage, but the description fails to compensate for missing safety and operational details.

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 description adds minimal meaning beyond the input schema, which has 100% coverage for the single parameter 'pieId'. It implies the parameter identifies the pie to delete but doesn't provide additional context like format examples or constraints. Baseline 3 is appropriate since the schema does the heavy lifting.

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 ('Delete') and the resource ('an investment pie by ID'), providing specific verb+resource pairing. However, it doesn't distinguish this tool from sibling tools like 'cancel_order' or 'update_pie' which might also involve modifications to investment data, missing full sibling differentiation.

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

Usage 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 doesn't mention prerequisites (e.g., needing an existing pie), exclusions (e.g., cannot delete if pie has active orders), or compare to siblings like 'update_pie' for modifications instead of deletion.

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

get_account_cashB

Get detailed cash balance information including free, invested, blocked, and total amounts

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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. While 'Get' implies a read operation, the description doesn't address important behavioral aspects: whether authentication is required, rate limits, whether this returns real-time or cached data, error conditions, or what format the response takes. For a financial data tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

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 immediately states the tool's purpose and enumerates the specific data fields returned. Every word earns its place - there's no redundancy, unnecessary elaboration, or structural issues. The information is front-loaded with no wasted verbiage.

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 tool's moderate complexity (financial data retrieval) and the absence of both annotations and an output schema, the description is minimally adequate but incomplete. It specifies what data fields are returned but doesn't describe the response format, data types, units, or potential error conditions. For a tool that presumably returns sensitive financial information, more context about the nature and structure of the response would be helpful.

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 0 parameters with 100% schema description coverage, so the schema already fully documents the parameter situation. The description appropriately doesn't discuss parameters since none exist. It earns a baseline 4 because when there are no parameters, the description shouldn't attempt to explain them, and it focuses correctly on what the tool returns instead.

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 with a specific verb ('Get') and resource ('detailed cash balance information'), including the specific data fields it returns (free, invested, blocked, and total amounts). It distinguishes itself from siblings like get_account_info and get_account_summary by focusing specifically on cash balances rather than general account data or summaries. However, it doesn't explicitly contrast with these siblings in the description text itself.

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. With siblings like get_account_info and get_account_summary that likely provide overlapping or related financial data, there's no indication of when this cash-specific tool is preferable. No prerequisites, timing considerations, or exclusion criteria are mentioned.

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

get_account_infoB

Retrieve account metadata including currency code and account ID

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/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 implies a read-only operation ('Retrieve') but doesn't address permissions, rate limits, error conditions, or response format. For a tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves beyond its basic purpose.

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 directly states the tool's purpose without any fluff or redundancy. It's front-loaded with the core action and resource, making it easy to parse quickly. Every word earns its place by contributing essential information.

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 tool's simplicity (0 parameters, no output schema, no annotations), the description is adequate for a basic read operation. It specifies what data is retrieved, which helps the agent understand the return value. However, it lacks details on behavioral aspects like error handling or format, leaving some context gaps despite the low 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?

The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description appropriately doesn't discuss parameters, focusing instead on the returned data. This meets the baseline for tools with no parameters, as there's nothing to compensate for or add beyond the schema.

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

Purpose4/5

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

The description clearly states the verb ('Retrieve') and resource ('account metadata'), specifying what data is returned ('currency code and account ID'). It distinguishes this from siblings like 'get_account_cash' or 'get_account_summary' by focusing on metadata rather than financial details. However, it doesn't explicitly contrast with all siblings, keeping it from a perfect score.

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

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 like 'get_account_summary' or 'get_account_cash'. It lacks context about prerequisites, timing, or exclusions, leaving the agent to infer usage based on tool names alone. This minimal guidance is insufficient for optimal tool selection.

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

get_account_summaryB

Get comprehensive account summary with cash, invested amounts, profit/loss, and available funds

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/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 the tool retrieves data ('Get'), implying a read-only operation, but doesn't mention any behavioral traits such as authentication requirements, rate limits, or potential side effects. This leaves gaps in understanding how the tool behaves in practice.

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 that front-loads the core purpose and lists key data points without unnecessary details. It avoids redundancy and wastes no words, making it easy to scan and understand quickly.

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 tool has 0 parameters and no output schema, the description adequately covers the purpose and return data. However, with no annotations and multiple sibling tools, it lacks context on usage differentiation and behavioral aspects, making it minimally viable but incomplete for optimal agent decision-making.

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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on what the tool returns rather than inputs, adding value by specifying the data included in the summary (cash, invested amounts, etc.), which compensates for the lack of an output schema.

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

Purpose4/5

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

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('account summary'), and lists the key data points returned (cash, invested amounts, profit/loss, available funds). However, it doesn't explicitly differentiate from sibling tools like 'get_account_info' or 'get_account_cash', which could provide overlapping or related information.

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. With siblings like 'get_account_info' and 'get_account_cash', there's no indication of how this tool differs in scope or when it's preferred over other account-related tools, leaving usage context unclear.

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

get_dividendsC

Get dividend payment history with pagination support

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor for fetching next page
limitNoMaximum number of results to return
tickerNoFilter by ticker symbol

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 carries full burden for behavioral disclosure. It mentions 'pagination support' which is useful, but doesn't describe authentication requirements, rate limits, error conditions, or what format the dividend history returns. For a data retrieval tool with no annotation coverage, this leaves significant behavioral aspects undocumented.

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 at just 7 words. It's front-loaded with the core purpose and includes one important behavioral feature (pagination support). Every word earns its place with no redundancy or unnecessary elaboration.

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 data retrieval tool with 3 parameters and no output schema, the description is insufficient. It doesn't explain what the dividend history includes (amounts, dates, frequency), doesn't mention authentication requirements, and provides no context about data freshness or limitations. With no annotations and no output schema, more completeness is needed.

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 100%, so all parameters are documented in the schema. The description doesn't add any parameter semantics beyond what's in the schema - it doesn't explain how pagination works with the cursor parameter, typical limit values, or ticker symbol format requirements. Baseline 3 is appropriate when schema does the heavy lifting.

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: 'Get dividend payment history' specifies the verb (get) and resource (dividend payment history). It distinguishes from siblings like get_account_cash or get_transactions by focusing specifically on dividends. However, it doesn't explicitly differentiate from get_position or get_portfolio which might also contain dividend information.

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 mentions 'pagination support' which is a feature but doesn't indicate when this tool is preferred over other data retrieval tools like get_transactions or get_portfolio. There's no mention of prerequisites, constraints, or typical use cases.

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

get_exchangesB

Get information about exchanges and their trading schedules

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

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 states the tool retrieves information, implying a read-only operation, but doesn't specify aspects like whether it requires authentication, returns real-time or cached data, handles errors, or has rate limits. For a tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.

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 directly states the tool's purpose without any fluff or redundancy. It's front-loaded and every word contributes to understanding, making it highly concise and well-structured.

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

Completeness3/5

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

Given the tool has 0 parameters, no annotations, and no output schema, the description is minimally complete for a simple read operation. It clarifies what information is retrieved, but lacks details on output format, error handling, or integration with siblings, leaving room for improvement in a broader context.

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 input schema has 0 parameters with 100% coverage, meaning no parameters are documented in the schema. The description doesn't mention any parameters, which is appropriate since none exist. It adds no semantic details beyond the schema, but with zero parameters, the baseline is 4 as it doesn't need to compensate for missing information.

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 with a specific verb ('Get') and resource ('exchanges and their trading schedules'), making it immediately understandable. However, it doesn't differentiate from sibling tools like 'get_instruments' or 'get_account_info', which also retrieve information but about different resources, so it misses full 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 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. With siblings like 'get_instruments' (which might list tradable assets on exchanges) and 'get_account_info' (which could include exchange-related account details), there's no indication of context, prerequisites, or exclusions for selecting this tool.

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

get_instrumentsB

List all tradeable instruments with metadata including ISIN, currency, type, and trading schedules

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoOptional search query to filter instruments by ticker, name, or ISIN

TDQS

B3.1/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 full burden. It mentions metadata fields but doesn't disclose behavioral traits like whether this is a read-only operation, if it requires authentication, rate limits, pagination, or what happens if no instruments match. For a list operation with no annotations, this leaves significant gaps in understanding how it behaves.

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

Conciseness4/5

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

The description is a single, efficient sentence that front-loads the core action ('List all tradeable instruments') and adds useful metadata details. There's no wasted text, though it could be slightly more structured by separating purpose from metadata.

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?

Given no annotations and no output schema, the description is incomplete. It doesn't explain what the return values look like (e.g., format, pagination), authentication needs, or error conditions. For a tool that lists financial instruments, more context on behavior and output is needed for effective use.

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 100%, so the schema already documents the optional 'search' parameter. The description doesn't add any parameter-specific information beyond implying a list operation. It mentions metadata fields but doesn't tie them to parameters. Baseline 3 is appropriate since the schema handles parameter 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 clearly states the verb ('List') and resource ('all tradeable instruments'), specifying the scope ('all') and metadata details (ISIN, currency, type, trading schedules). It distinguishes from siblings like get_exchanges (which lists exchanges) or get_account_info (which focuses on account data).

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 on when to use this tool versus alternatives. For example, it doesn't mention if this should be used for general browsing versus get_position for specific holdings, or how it relates to get_exchanges for exchange-specific instruments. The description only states what it does, not when to choose it.

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

get_orderB

Get detailed information about a specific order by order ID

ParametersJSON Schema
NameRequiredDescriptionDefault
orderIdYesThe unique identifier of the order

TDQS

B3.1/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 states this is a 'get' operation, implying read-only behavior, but doesn't confirm if it's safe, whether it requires authentication, what happens with invalid IDs, or if there are rate limits. For a tool with zero annotation coverage, this leaves significant behavioral gaps.

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 gets straight to the point with zero wasted words. It's appropriately sized for a simple lookup tool and front-loads the essential information without unnecessary elaboration.

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 tool's simplicity (single parameter, 100% schema coverage) and lack of output schema, the description is minimally adequate but has clear gaps. It doesn't explain what 'detailed information' includes or the response format, which would be helpful since there's no output schema. For a read operation with no annotations, it should provide more behavioral context.

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 schema description coverage is 100%, with the single parameter 'orderId' clearly documented in the schema as 'The unique identifier of the order'. The description adds no additional parameter semantics beyond what's already in the schema, so it meets the baseline score of 3 for high schema coverage.

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 with a specific verb ('Get') and resource ('detailed information about a specific order'), making it easy to understand what it does. However, it doesn't differentiate from sibling tools like 'get_orders' (plural) or 'get_order_history', which could cause confusion about when to use this versus those 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?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention siblings like 'get_orders' (for listing orders) or 'get_order_history' (for historical data), leaving the agent to guess based on tool names alone. There's no explicit when/when-not usage context provided.

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

get_order_historyC

Get historical orders with pagination support

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor for fetching next page
limitNoMaximum number of results to return (default 50)
tickerNoFilter by ticker symbol

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 carries full burden but only mentions pagination support. It lacks details on permissions, rate limits, error handling, or return format (e.g., structure of historical orders). This leaves significant behavioral gaps for a read operation.

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 brief and front-loaded with the core purpose. It wastes no words but could be slightly more informative without losing conciseness, such as by clarifying the historical aspect or differentiating from siblings.

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 tool with 3 parameters, no annotations, and no output schema, the description is insufficient. It doesn't explain what 'historical orders' entails (e.g., time range, statuses), the response format, or how pagination works beyond cursor/limit, leaving key contextual gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so parameters are well-documented in the schema. The description adds no additional parameter semantics beyond implying historical scope, which is minimal value. Baseline 3 is appropriate as the schema handles most documentation.

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 historical orders') and mentions a key feature ('with pagination support'), which distinguishes it from simple retrieval tools. However, it doesn't explicitly differentiate from sibling tools like 'get_orders' or 'get_order', leaving some ambiguity about scope.

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 on when to use this tool versus alternatives like 'get_orders' or 'get_order'. The description implies historical data retrieval but doesn't specify contexts, prerequisites, or exclusions, offering minimal usage direction.

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

get_ordersB

Retrieve all active orders (pending, processing, etc.)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/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. It mentions retrieving 'all active orders' but does not disclose behavioral traits such as pagination, rate limits, authentication needs, or what 'active' precisely entails (e.g., statuses included). This leaves significant gaps for a tool that likely returns multiple items.

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 with zero waste. It is front-loaded with the core purpose and includes a clarifying parenthetical. Every word 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?

Given no annotations, no output schema, and a tool that retrieves multiple items, the description is incomplete. It lacks details on return format (e.g., list structure, fields), pagination, error handling, or how 'active' is defined, which are critical for an AI agent to use 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 input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description adds no parameter information, which is acceptable here, but a baseline of 4 is given since it doesn't need to compensate for any schema gaps.

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 verb ('Retrieve') and resource ('all active orders'), specifying the scope with 'active orders (pending, processing, etc.)'. It distinguishes from siblings like 'get_order' (singular) and 'get_order_history' (historical), but could be more explicit about the distinction.

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 for retrieving active orders only, but does not explicitly state when to use this tool versus alternatives like 'get_order' (for a specific order) or 'get_order_history' (for past orders). No guidance on prerequisites or exclusions is provided.

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

get_pieC

Get detailed information about a specific pie by ID

ParametersJSON Schema
NameRequiredDescriptionDefault
pieIdYesThe unique identifier of the pie

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 states this is a 'Get' operation, implying it's likely read-only, but doesn't confirm if it's safe, requires authentication, has rate limits, or what the output format might be. This leaves significant gaps for a tool with no structured safety hints.

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 directly states the tool's purpose without any wasted words. It's front-loaded and appropriately sized for a simple retrieval tool.

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?

Given the lack of annotations and output schema, the description is incomplete. It doesn't explain what 'detailed information' includes, potential error cases, or behavioral traits like idempotency. For a retrieval tool in a financial context (inferred from siblings), more context on data sensitivity or response structure would be helpful.

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 schema description coverage is 100%, with the parameter 'pieId' clearly documented as 'The unique identifier of the pie'. The description adds no additional meaning beyond this, such as format examples or constraints, so it meets the baseline for high schema coverage without extra value.

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 verb ('Get') and resource ('detailed information about a specific pie'), making the purpose understandable. However, it doesn't distinguish this from sibling tools like 'get_pies' (plural) or 'get_portfolio', which might also retrieve pie-related information, so it misses full sibling differentiation.

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

Usage 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. For example, it doesn't specify if this should be used instead of 'get_pies' for single pies or 'get_portfolio' for broader data, leaving the agent to infer usage from context alone.

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

get_piesA

List all investment pies (portfolio buckets) with their configurations and holdings

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.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 full burden. It states it's a list operation but does not disclose behavioral traits like pagination, rate limits, authentication needs, or whether it returns real-time or cached data. For a read tool with zero annotation coverage, this is a significant gap.

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

Conciseness5/5

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

The description is a single, efficient sentence that front-loads the purpose ('List all investment pies') and adds necessary detail ('with their configurations and holdings'). There is zero waste or redundancy.

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 tool's simplicity (0 parameters, no output schema), the description is adequate but incomplete. It lacks behavioral context (e.g., data freshness, error handling) that would be helpful for an AI agent, though the low complexity mitigates some need for extensive detail.

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 0 parameters with 100% schema description coverage, so the schema fully documents the absence of inputs. The description adds no parameter semantics, but with no parameters, the baseline is 4 as it does not need to compensate for any gaps.

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 ('List') and resource ('all investment pies (portfolio buckets)') with specific scope ('with their configurations and holdings'). It distinguishes from siblings like 'get_pie' (singular) and 'get_portfolio' (broader portfolio data).

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?

The description implies usage for retrieving comprehensive pie data, but does not explicitly state when to use this versus alternatives like 'get_pie' (single pie) or 'get_portfolio' (overall portfolio). It provides clear context but lacks explicit exclusions or named alternatives.

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

get_portfolioA

List all open positions in the portfolio with current prices, quantities, and profit/loss

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/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 full burden. It states this is a read operation ('List'), but does not disclose behavioral traits like permissions needed, rate limits, data freshness, or error conditions. The description is minimal and lacks context 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, efficient sentence that front-loads the core purpose ('List all open positions in the portfolio') and adds necessary details without waste. Every word contributes to understanding the tool's function.

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 tool's complexity (simple read operation with 0 params) and lack of annotations/output schema, the description is adequate but minimal. It covers what the tool does but lacks completeness in behavioral context, such as return format or limitations, which would be helpful for an agent.

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 0 parameters with 100% schema description coverage, so no parameter information is needed. The description does not add param semantics, but this is acceptable given the lack of parameters, aligning with the baseline for 0 params.

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 specific action ('List all open positions') and resource ('portfolio'), with details on what data is included ('current prices, quantities, and profit/loss'). It distinguishes from siblings like get_position (single position) and get_account_info (account metadata).

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 for viewing portfolio holdings but does not explicitly state when to use this tool versus alternatives like get_account_summary or get_position. No exclusions or prerequisites are mentioned, leaving usage context partially inferred.

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

get_positionC

Get detailed information about a specific position by ticker symbol

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesThe ticker symbol of the instrument (e.g., AAPL, TSLA)

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 carries full burden for behavioral disclosure. It states this is a read operation ('Get'), but doesn't mention authentication needs, rate limits, error conditions, or what 'detailed information' includes (e.g., current price, holdings, performance). For a financial data tool with zero annotation coverage, this leaves significant behavioral gaps.

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 communicates the core purpose without unnecessary words. It's appropriately sized for a simple lookup tool and front-loads the essential information. Every word earns its place with zero waste.

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?

Given no annotations, no output schema, and a simple single-parameter input, the description is incomplete. It doesn't explain what 'detailed information' returns, authentication requirements, error handling, or how it differs from similar tools. For a financial position tool where users need to understand what data to expect, this leaves too many unanswered questions.

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 100%, with the single parameter 'ticker' well-documented in the schema. The description adds minimal value beyond the schema by mentioning 'ticker symbol' but provides no additional context about format requirements, valid symbols, or examples beyond what's already in the schema. Baseline 3 is appropriate when schema does the heavy lifting.

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 detailed information') and resource ('about a specific position'), specifying it requires a ticker symbol. It distinguishes from siblings like get_instruments (general) or get_portfolio (aggregate), but doesn't explicitly name alternatives. Purpose is clear but sibling differentiation is implicit rather than explicit.

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 like get_instruments (broader instrument info) or get_portfolio (aggregate position data). It mentions the ticker requirement but offers no context about prerequisites, appropriate scenarios, or exclusions. Usage is implied from the name and description but not explicitly stated.

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

get_transactionsB

Get transaction history including deposits, withdrawals, orders, dividends, and fees

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoPagination cursor for fetching next page
limitNoMaximum number of results to return

TDQS

B3.1/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 burden but offers minimal behavioral information. It doesn't disclose whether this is a read-only operation, if it requires authentication, rate limits, pagination behavior beyond cursor/limit parameters, or what format the history returns. 'Get' implies safe retrieval but lacks confirmation.

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 with zero wasted words. It's appropriately sized for a simple retrieval tool and front-loads the core purpose immediately.

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 read operation with full parameter documentation and no output schema, the description is minimally adequate but lacks important context. It doesn't explain the return format, how transaction types are distinguished, or behavioral traits like pagination or authentication needs, leaving gaps for agent understanding.

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 100%, so parameters are fully documented in the schema. The description adds no additional parameter semantics beyond implying the tool returns transaction history, which is already clear from the tool name and description purpose.

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 verb ('Get') and resource ('transaction history') with specific examples of transaction types (deposits, withdrawals, orders, dividends, fees). However, it doesn't explicitly differentiate from sibling tools like get_dividends or get_order_history, which appear to fetch subsets of the same data.

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 alternatives like get_dividends or get_order_history. The description implies comprehensive transaction retrieval but doesn't specify use cases, prerequisites, or exclusions.

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

place_limit_orderC

Place a limit order to buy or sell at a specified price or better

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesThe ticker symbol of the instrument
quantityYesThe quantity to buy (positive) or sell (negative)
limitPriceYesThe limit price for the order
timeValidityNoTime validity of the orderDAY

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 states the action ('place a limit order') but doesn't mention critical behaviors like authentication requirements, rate limits, whether the order is executed immediately or queued, potential side effects (e.g., account balance changes), or error handling. This leaves significant gaps for a financial transaction tool.

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 directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy to parse quickly.

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?

Given the complexity of a financial order placement tool with no annotations and no output schema, the description is insufficient. It lacks details on behavioral traits (e.g., execution behavior, errors), output expectations, and usage context, leaving the agent under-informed for safe and effective invocation.

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

Parameters3/5

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

Schema description coverage is 100%, providing clear documentation for all parameters (ticker, quantity, limitPrice, timeValidity). The description adds minimal value beyond the schema by implying the 'limit' aspect of the order, but it doesn't elaborate on parameter meanings, constraints, or interactions, so it meets the baseline for high schema coverage.

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 ('place a limit order') and the resource ('buy or sell at a specified price or better'), making the purpose evident. However, it doesn't explicitly differentiate from sibling tools like 'place_market_order' or 'place_stop_limit_order', which would require mentioning the specific price condition or execution guarantee.

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 on when to use this tool versus alternatives such as 'place_market_order' or 'place_stop_order'. The description implies usage for limit orders but lacks explicit context, prerequisites, or exclusions, leaving the agent to infer based on general knowledge.

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

place_market_orderC

Place a market order to buy or sell at the current market price

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesThe ticker symbol of the instrument
quantityYesThe quantity to buy (positive) or sell (negative)
extendedHoursNoAllow execution outside regular trading hours (defaults to false)

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 carries full burden for behavioral disclosure. It states this is a market order but doesn't cover critical aspects like execution guarantees, settlement time, fees, authentication requirements, rate limits, or what happens on failure. The description is insufficient for a financial transaction tool with no annotation support.

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 with zero wasted words. It's front-loaded with the core purpose and doesn't include unnecessary elaboration or repetition.

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 trading tool with no annotations and no output schema, the description is incomplete. It doesn't explain what happens after order placement, return values, error conditions, or important behavioral context. The agent would lack critical information to use this tool effectively in a trading workflow.

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 100%, so parameters are fully documented in the schema. The description adds no additional parameter semantics beyond what's already in the schema (ticker, quantity with sign convention, extendedHours default). Baseline score of 3 is appropriate when schema does the heavy lifting.

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 ('place a market order') and specifies the execution method ('buy or sell at the current market price'). It distinguishes from limit/stop orders by specifying 'market price' but doesn't explicitly differentiate from all sibling trading tools like 'place_limit_order' or 'place_stop_order' beyond the price mechanism.

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 like 'place_limit_order' or 'place_stop_order'. It doesn't mention prerequisites, trading contexts, or risk considerations that would help an agent choose between sibling order placement tools.

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

place_stop_limit_orderB

Place a stop-limit order that becomes a limit order when the stop price is reached

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesThe ticker symbol of the instrument
quantityYesThe quantity to buy (positive) or sell (negative)
stopPriceYesThe stop price that triggers the limit order
limitPriceYesThe limit price for the order once triggered
timeValidityNoTime validity of the orderDAY

TDQS

B3.2/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 mentions the order's triggering mechanism but fails to cover critical aspects like authentication requirements, rate limits, order confirmation, execution risks, or what happens on partial fills. For a financial trading tool with mutation implications, this is a significant gap.

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

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 functionality with zero wasted words. It directly communicates the tool's purpose without unnecessary elaboration.

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 complex financial order placement tool with no annotations and no output schema, the description is incomplete. It lacks information on behavioral traits (e.g., idempotency, error handling), return values, and practical usage constraints, leaving the agent under-informed for safe invocation.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description adds no additional semantic context about parameters beyond implying the relationship between stopPrice and limitPrice in the order logic, which is minimal value over the schema.

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 specific action ('Place a stop-limit order') and explains the mechanism ('becomes a limit order when the stop price is reached'), distinguishing it from sibling tools like place_limit_order and place_stop_order by specifying the hybrid nature of this order type.

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 like place_limit_order or place_stop_order, nor does it mention prerequisites such as account authorization or market conditions. It merely states what the tool does without contextual usage advice.

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

place_stop_orderC

Place a stop order that becomes a market order when the stop price is reached

ParametersJSON Schema
NameRequiredDescriptionDefault
tickerYesThe ticker symbol of the instrument
quantityYesThe quantity to buy (positive) or sell (negative)
stopPriceYesThe stop price that triggers the market order
timeValidityNoTime validity of the orderDAY

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. It explains the basic behavior (stop order triggers a market order), but fails to disclose critical traits such as execution risks (e.g., slippage), authentication requirements, rate limits, order confirmation details, or potential errors. This is inadequate for a financial trading tool with no annotation coverage.

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 directly explains the tool's function without unnecessary words. It is front-loaded with the core action and mechanism, making it easy to understand quickly.

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?

Given the complexity of a financial order placement tool with no annotations and no output schema, the description is insufficient. It lacks details on return values (e.g., order ID or confirmation), error handling, side effects (e.g., fund holds), and behavioral nuances like order lifecycle. This leaves significant gaps for an AI agent to use the tool effectively.

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 100%, so the schema fully documents all parameters. The description adds no additional meaning beyond what's in the schema (e.g., it doesn't clarify the relationship between stopPrice and market execution or explain quantity sign conventions). Baseline 3 is appropriate as the schema handles parameter documentation.

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 ('place a stop order') and the mechanism ('becomes a market order when the stop price is reached'), which is specific and distinguishes it from siblings like 'place_market_order' or 'place_limit_order'. However, it doesn't explicitly mention the financial instrument context (e.g., trading stocks), though this is implied by the tool name and sibling 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 such as 'place_stop_limit_order' or 'place_market_order'. It lacks context about scenarios where a stop order is appropriate (e.g., for risk management or automated trading) or prerequisites like account permissions.

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

request_exportC

Request a CSV export of account data for a specified time period

ParametersJSON Schema
NameRequiredDescriptionDefault
timeFromYesStart date in ISO 8601 format (e.g., 2024-01-01T00:00:00Z)
timeToYesEnd date in ISO 8601 format
includeDividendsNoInclude dividend data in export
includeInterestNoInclude interest data in export
includeOrdersNoInclude order data in export
includeTransactionsNoInclude transaction data in export

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 full burden. It states the tool requests an export but doesn't disclose behavioral traits such as whether this triggers an asynchronous process, expected response format (e.g., file download link), rate limits, permissions required, or potential side effects (e.g., data processing delays). This is a significant gap for a tool with no annotation coverage.

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 with zero waste. It front-loads the core action and resource, making it easy to parse. Every word earns its place without redundancy.

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?

Given no annotations, no output schema, and 6 parameters, the description is incomplete. It lacks details on behavioral aspects (e.g., async vs. sync, response handling), error conditions, or integration context. For a tool that likely involves data processing and export generation, this minimal description leaves critical gaps.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema fully documents all 6 parameters (timeFrom, timeTo, and boolean flags). The description adds no parameter-specific semantics beyond implying a time period is required, which is already covered by the schema. Baseline 3 is appropriate as the schema does the heavy lifting.

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 ('Request a CSV export') and resource ('account data'), with scope ('for a specified time period'). It distinguishes from siblings like get_account_summary or get_transactions by focusing on export generation rather than direct data retrieval. However, it doesn't explicitly differentiate from all potential export-related tools (none exist in siblings).

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 alternatives is provided. The description doesn't mention prerequisites (e.g., authentication needs), typical use cases, or comparisons with sibling tools like get_account_summary for aggregated data. Usage is implied by the action but lacks explicit context.

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

update_pieC

Update an existing pie configuration

ParametersJSON Schema
NameRequiredDescriptionDefault
pieIdYesThe unique identifier of the pie
nameNoUpdated name of the pie
iconNoUpdated icon identifier
instrumentSharesNoUpdated instrument allocations
dividendCashActionNoUpdated dividend action
goalNoUpdated investment goal

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 states the tool updates a configuration, implying a mutation, but doesn't cover permissions, side effects (e.g., impact on related data), error handling, or response format. For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding how the tool behaves.

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 with zero waste. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place, and there's no redundancy or unnecessary elaboration.

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?

Given the complexity (6 parameters, nested objects, mutation operation) and lack of annotations and output schema, the description is incomplete. It doesn't explain what a 'pie configuration' entails, the scope of updates, or behavioral aspects like validation or errors. For a tool with rich input schema but no other structured data, more context is needed to guide effective use.

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 100%, so the schema fully documents all 6 parameters. The description adds no additional meaning beyond implying that parameters relate to 'configuration,' which is vague. With high schema coverage, the baseline is 3, as the description doesn't compensate but also doesn't detract from the schema's clarity.

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 ('Update') and resource ('an existing pie configuration'), making the purpose evident. It distinguishes from siblings like create_pie (creation) and delete_pie (deletion), though it doesn't explicitly differentiate from other update-like operations. The description is specific but could be more precise about what 'configuration' entails.

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 doesn't mention prerequisites (e.g., needing an existing pie), compare to siblings like get_pie for viewing or create_pie for initial setup, or specify scenarios for updates. Usage is implied from the verb 'Update,' but no explicit context or exclusions are given.

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

Tool Schema Changelog

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

  1. 23 tool updatesv1.0.0
    • Addedcancel_order
    • Addedcreate_pie
    • Addeddelete_pie
    • Addedget_account_cash
    • Addedget_account_info
    • Addedget_account_summary
    • Addedget_dividends
    • Addedget_exchanges
    • Addedget_instruments
    • Addedget_order
    • Addedget_order_history
    • Addedget_orders
    • Addedget_pie
    • Addedget_pies
    • Addedget_portfolio
    • Addedget_position
    • Addedget_transactions
    • Addedplace_limit_order
    • Addedplace_market_order
    • Addedplace_stop_limit_order
    • Addedplace_stop_order
    • Addedrequest_export
    • Addedupdate_pie

TDQS

A3.5/5.0

Scored across 23 tools

Disambiguation5/5

Each tool has a clearly distinct purpose targeting specific resources and actions, such as cancel_order vs. get_order for order management, and get_portfolio vs. get_position for portfolio details. No tools appear to overlap or cause confusion, with clear boundaries between operations like place_limit_order and place_stop_limit_order.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case, such as get_account_info, place_market_order, and update_pie. There are no deviations in naming conventions, making the set predictable and easy to navigate for an agent.

Tool Count4/5

With 23 tools, the count is slightly high but reasonable for a comprehensive trading platform covering orders, pies, account info, and instruments. It feels slightly heavy but not excessive, as each tool serves a distinct function in the domain.

Completeness5/5

The tool set provides complete CRUD/lifecycle coverage for trading and portfolio management, including order placement, cancellation, pie management, account data retrieval, and transaction history. No obvious gaps exist; agents can perform all core workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides secure access to Trading 212 Public API through MCP, enabling Claude Desktop users to manage portfolios, execute trades, and analyze market data using natural language commands.
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to manage Trading212 brokerage accounts, including portfolio analysis, order placement (demo mode), and investment pie management.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides read-only access to Trading 212 accounts, enabling AI assistants to retrieve portfolio positions, account summaries, instrument data, and transaction history.
    16
    5
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Exposes Trading 212 trading account, instruments, orders, history, and pies as MCP tools. Allows placing and canceling real orders (defaults to demo/paper environment).
    Apache 2.0