Trading 212 MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Trading 212 MCP ServerShow my open positions and total portfolio performance"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Trading 212 MCP Server
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)
Option 1: Docker (Recommended for Production)
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 -dSee 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 buildConfiguration
Getting Your API Key
Open the Trading 212 app (mobile or web)
Navigate to Settings → API (Beta)
Click Generate API Key
Configure permissions:
✅ Account data (read) - View account information
✅ History (read) - Access historical data
✅ Orders (read/write) - View and place orders
✅ Portfolio (read) - View positions
(Optional) Set IP address whitelist for additional security
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=developmentEnvironments:
demo- Paper trading environment (recommended for testing)API Base URL:
https://demo.trading212.com/api/v0Uses paper trading account (no real money)
Safe for testing and development
Default value if not specified
live- Real money trading environmentAPI Base URL:
https://live.trading212.com/api/v0Uses 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 detaildebug- Detailed logs including API requests, rate limits, and debug infoinfo- Standard operation logs (default, recommended)warn- Only warnings and errorserror- Only errorsfatal- 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 |
|
Streamable HTTP | Server runs separately |
|
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 informationget_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 summaryPortfolio 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 detailsOrder 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 12345cancel_order
Cancel an active order.
Parameters:
orderId(number, required) - The order ID to cancel
Example:
Cancel order 12345place_market_order
Place a market order to execute immediately at the current market price.
Parameters:
ticker(string, required) - Ticker symbolquantity(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 priceplace_limit_order
Place a limit order to execute at a specified price or better.
Parameters:
ticker(string, required) - Ticker symbolquantity(number, required) - Quantity to buy/selllimitPrice(number, required) - Maximum buy price or minimum sell pricetimeValidity(string, optional) - "DAY" or "GTC"
Example:
Place a limit order to buy 5 shares of Tesla at $200place_stop_order
Place a stop order that becomes a market order when triggered.
Parameters:
ticker(string, required) - Ticker symbolquantity(number, required) - Quantity to buy/sellstopPrice(number, required) - Price that triggers the ordertimeValidity(string, optional) - "DAY" or "GTC"
Example:
Place a stop order to sell 10 shares of MSFT if price drops below $300place_stop_limit_order
Place a stop-limit order that becomes a limit order when triggered.
Parameters:
ticker(string, required) - Ticker symbolquantity(number, required) - Quantity to buy/sellstopPrice(number, required) - Price that triggers the orderlimitPrice(number, required) - Limit price once triggeredtimeValidity(string, optional) - "DAY" or "GTC"
Example:
Place a stop-limit order to sell GOOGL at $140 with stop at $145Instruments & 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 instrumentsget_exchanges
Get information about exchanges and trading schedules.
Example:
Show me exchange trading hoursInvestment Pies
get_pies
List all investment pies with their configurations.
Example:
Show me all my piesget_pie
Get detailed information about a specific pie.
Parameters:
pieId(number, required) - The pie ID
Example:
Show details for pie 123create_pie
Create a new investment pie.
Parameters:
name(string, required) - Pie name (1-50 characters)icon(string, required) - Icon identifierinstrumentShares(object, required) - Ticker to allocation mappingdividendCashAction(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 dividendsupdate_pie
Update an existing pie configuration.
Parameters:
pieId(number, required) - The pie IDOther parameters same as create_pie (all optional)
Example:
Update pie 123 to change allocation to 60% AAPL and 40% GOOGLdelete_pie
Delete an investment pie.
Parameters:
pieId(number, required) - The pie ID to delete
Example:
Delete pie 123Historical Data
get_order_history
Get historical orders with pagination support.
Parameters:
cursor(number, optional) - Pagination cursorlimit(number, optional) - Results per page (default: 50)ticker(string, optional) - Filter by ticker
Example:
Show me my order history for the last monthget_dividends
Get dividend payment history.
Parameters:
cursor(number, optional) - Pagination cursorlimit(number, optional) - Results per pageticker(string, optional) - Filter by ticker
Example:
Show me all dividends received this yearget_transactions
Get complete transaction history.
Parameters:
cursor(number, optional) - Pagination cursorlimit(number, optional) - Results per page
Example:
Show me my recent transactionsrequest_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 2024Example 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 lossOrder 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 shareHistorical 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 allowedx-ratelimit-remaining- Requests remainingx-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 devBuild for Production
npm run buildWatch Mode (Auto-rebuild)
npm run watchAPI 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
Never commit API keys to version control
Use environment variables for sensitive configuration
Enable IP whitelisting if possible
Test in demo environment before using live
Use minimal permissions needed for your use case
Rotate API keys regularly
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.jsAvailable levels (from most to least verbose):
trace- Everything including internal detailsdebug- API requests, rate limits, detailed operationsinfo- Server startup, tool executions (default)warn- Warnings and potential issueserror- Errors onlyfatal- Fatal errors causing shutdown
Log Output Formats
Development mode (pretty-printed, colored):
NODE_ENV=development npm run devExample 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 startExample 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.jsDebug 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 devLook 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 contextLogging 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*.logWindows:
Get-Content "$env:APPDATA\Claude\Logs\mcp*.log" -WaitTroubleshooting
Server Not Appearing in Claude Desktop
Verify the path in
claude_desktop_config.jsonis absoluteEnsure the project is built (
npm run build)Check that
dist/index.jsexistsRestart Claude Desktop completely
Check Claude Desktop logs for errors
Authentication Errors
Verify API key is correct in
.envor configCheck that API key has required permissions
Ensure you're using the correct environment (demo/live)
Verify IP whitelist settings if enabled
Rate Limit Errors
Wait for the rate limit window to reset
Check
x-ratelimit-resetheader for reset timeReduce frequency of API calls
Implement caching where appropriate
Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch
Make your changes with tests
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:
Zod for schema validation
Made with ❤️ for the Trading 212 and AI community
Available Tools
23 toolscancel_orderC
Cancel an active order by order ID
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | The unique identifier of the order to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Name of the pie (1-50 characters) | |
| icon | Yes | Icon identifier for the pie | |
| instrumentShares | Yes | Object mapping ticker symbols to their percentage allocation (e.g., {"AAPL": 0.5, "GOOGL": 0.5}) | |
| dividendCashAction | Yes | What to do with dividend cash | |
| goal | No | Optional investment goal amount |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| pieId | Yes | The unique identifier of the pie to delete |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for fetching next page | |
| limit | No | Maximum number of results to return | |
| ticker | No | Filter by ticker symbol |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Optional search query to filter instruments by ticker, name, or ISIN |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| orderId | Yes | The unique identifier of the order |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for fetching next page | |
| limit | No | Maximum number of results to return (default 50) | |
| ticker | No | Filter by ticker symbol |
TDQS
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.
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.
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.
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.
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.
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.)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| pieId | Yes | The unique identifier of the pie |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | The ticker symbol of the instrument (e.g., AAPL, TSLA) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for fetching next page | |
| limit | No | Maximum number of results to return |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | The ticker symbol of the instrument | |
| quantity | Yes | The quantity to buy (positive) or sell (negative) | |
| limitPrice | Yes | The limit price for the order | |
| timeValidity | No | Time validity of the order | DAY |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | The ticker symbol of the instrument | |
| quantity | Yes | The quantity to buy (positive) or sell (negative) | |
| extendedHours | No | Allow execution outside regular trading hours (defaults to false) |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | The ticker symbol of the instrument | |
| quantity | Yes | The quantity to buy (positive) or sell (negative) | |
| stopPrice | Yes | The stop price that triggers the limit order | |
| limitPrice | Yes | The limit price for the order once triggered | |
| timeValidity | No | Time validity of the order | DAY |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes | The ticker symbol of the instrument | |
| quantity | Yes | The quantity to buy (positive) or sell (negative) | |
| stopPrice | Yes | The stop price that triggers the market order | |
| timeValidity | No | Time validity of the order | DAY |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| timeFrom | Yes | Start date in ISO 8601 format (e.g., 2024-01-01T00:00:00Z) | |
| timeTo | Yes | End date in ISO 8601 format | |
| includeDividends | No | Include dividend data in export | |
| includeInterest | No | Include interest data in export | |
| includeOrders | No | Include order data in export | |
| includeTransactions | No | Include transaction data in export |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It 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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| pieId | Yes | The unique identifier of the pie | |
| name | No | Updated name of the pie | |
| icon | No | Updated icon identifier | |
| instrumentShares | No | Updated instrument allocations | |
| dividendCashAction | No | Updated dividend action | |
| goal | No | Updated investment goal |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden 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.
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.
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.
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.
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.
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.
23 tool updates
v1.0.0- Added
cancel_order - Added
create_pie - Added
delete_pie - Added
get_account_cash - Added
get_account_info - Added
get_account_summary - Added
get_dividends - Added
get_exchanges - Added
get_instruments - Added
get_order - Added
get_order_history - Added
get_orders - Added
get_pie - Added
get_pies - Added
get_portfolio - Added
get_position - Added
get_transactions - Added
place_limit_order - Added
place_market_order - Added
place_stop_limit_order - Added
place_stop_order - Added
request_export - Added
update_pie
TDQS
Scored across 23 tools
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.
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.
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.
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
Related MCP Connectors
Agentic brokerage access to a US brokerage account: quotes, orders, positions, cash and documents.
- BankSyncOAuthio.banksync
Connect AI agents to bank accounts, transactions, balances, and investments.
Institutional financial data with SEC filing citations, for every AI agent. OAuth 2.1.
Trade across 22+ exchanges and brokers from any MCP-capable AI agent, no install required.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceProvides 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.-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage Trading212 brokerage accounts, including portfolio analysis, order placement (demo mode), and investment pie management.5MIT
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to Trading 212 accounts, enabling AI assistants to retrieve portfolio positions, account summaries, instrument data, and transaction history.165MIT
- AlicenseNot gradedqualityBmaintenanceExposes 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