Skip to main content
Glama
florinel-chis

etoro-mcp

etoro-mcp

MCP server for the eToro public API: market data, balances, portfolio, trade history, watchlists, alerts, investor rankings, user statistics, social feeds, and — behind explicit opt-in gates — trading, watchlist/alert mutations, and social posting. Coverage is organised into toolsets; only the toolsets you select are registered, and write tools are not registered at all unless their gate is enabled — a client connected to the default configuration cannot see or call them.

Features

  • Read-first by design — 62 read tools across eleven of the twelve toolsets (the social toolset is write-only); the 43 write tools exist only when their gate is set — 5 trading tools behind ETORO_MCP_ENABLE_TRADING, the other 38 (watchlist, alert, social, and notification mutations) behind ETORO_MCP_ENABLE_WRITES.

  • Demo environment by default — trading tools call the demo endpoint group unless ETORO_ENV=real is set.

  • Toolset selection — register only what you need via ETORO_MCP_TOOLSETS; unknown names fail startup rather than serving a partial tool set.

  • Trimmed responses — tools return the fields an investor acts on (prices, units, P&L, timestamps), not raw API dumps; list tools are bounded by a limit parameter or by explicit range parameters (min_date/max_date/count) on the time-series tools.

  • Credentials stay in the environment — keys travel only in the x-api-key/x-user-key headers, and error messages never echo header or credential values.

  • Rate-limit aware — HTTP 429 responses are retried once, honouring Retry-After, re-sending the same x-request-id so a retried order cannot fill twice.

Related MCP server: eToro MCP Server

Toolsets

Select toolsets with ETORO_MCP_TOOLSETS (comma-separated; all selects every toolset). Without it, the trading core is registered:

Toolset

Default

Covers

market

Instrument search and details, candles, rates, closing prices, exchanges, instrument types, stock industries

account

Profile, balances (aggregated, by account type, history), cash transactions

trading

Portfolio, P&L, order status, eligibility and cost estimates; gated order/position writes

history

Closed-trade history

watchlists

Own/public/curated watchlists and recommendations; gated watchlist mutations

alerts

Price alerts; gated alert mutations

rankings

Investor rankings, presets, tags, sector/industry summaries

users

User search, profiles, portfolios, performance and copier statistics

feeds

News, following, for-you, instrument, and user feeds; posts and comments

social

Gated posting, comments, replies, reactions, polls, and media upload

clubs

eToro Club dashboard

notifications

Notifications; gated mark-read

Tools

Read tools (registered whenever their toolset is selected)

Toolset

Tool

Description

market

search_instruments

Search instruments by ticker symbol and return candidate matches (contains-matching, so verify the symbol)

market

get_instrument_details

Display data for instruments by id: name, symbol, type, exchange

market

get_candles

OHLCV candles for one instrument (nine intervals, up to 1000 bars)

market

get_closing_prices

Latest official closing prices per instrument

market

get_rates

Real-time bid/ask quotes for instruments

market

list_exchanges

Exchanges (id and description) for resolving exchangeId values

market

list_instrument_types

Instrument types (stocks, crypto, ETFs, ...) by id

market

list_stock_industries

Stock industries (id and name) for resolving stocksIndustryId values

account

get_profile

The authenticated user's identity and the scopes their keys carry

account

get_aggregated_balances

Current balances aggregated across the user's accounts

account

get_balances_by_type

Current balances for every account of one account type

account

get_balance

Current balance of one specific account

account

get_balance_history

Daily balance snapshots over a date range

account

list_cash_transactions

Transactions of a cash account, newest pages first

trading

get_portfolio

Aggregated portfolio: account totals plus one aggregate per instrument

trading

get_portfolio_breakdown

Position-level snapshot: open positions and pending orders

trading

get_pnl

Portfolio snapshot with unrealized P&L per position

trading

get_order

Look up an order's status by order id or reference id

trading

get_close_order_info

Look up a close order's status by its order id

trading

check_trading_eligibility

Per-instrument trading rules: leverage, sizing mode, SL/TP bounds

trading

get_trading_cost_estimate

Estimate the costs of a hypothetical open order without placing it

history

list_trading_history

Closed trades since a given date

watchlists

list_watchlists

The authenticated user's watchlists with their items

watchlists

get_watchlist

A single watchlist owned by the authenticated user, by id

watchlists

get_default_watchlist

Items of the authenticated user's default watchlist

watchlists

get_public_watchlists

Another user's public watchlists by their numeric user id

watchlists

get_curated_lists

eToro's curated investment lists available to the user

watchlists

get_market_recommendations

Personalized market recommendations for the authenticated user

alerts

list_price_alerts

The active price alerts on the account

rankings

list_ranking_presets

Names of all publicly available ranking presets

rankings

get_rankings_by_preset

Investor ranking rows for a named preset

rankings

get_investor_rankings

A filtered, sorted page of investor ranking rows

rankings

get_investor_ranking_row

The full ranking row for a single investor

rankings

bulk_ranking_rows

Ranking rows for several investors in one call

rankings

list_ranking_tags

The catalog of ranking tags with resolved names

rankings

get_ranking_universe_by_sector

The ranking universe aggregated by sector or industry

users

search_users

Search public investors with performance and risk filters

users

get_user_profile

Public profile and account summary for one or more users

users

get_user_portfolio

A user's live public portfolio: open positions and copy trades

users

get_user_performance

A user's full monthly and yearly gain history

users

get_user_daily_performance

A user's day-by-day or aggregated gain over a date range

users

get_user_trade_info

A user's trading statistics for a period (copy-trading due diligence)

users

get_gain_timeseries

An investor's gain time-series at daily, monthly, or yearly resolution

users

get_asset_allocation_history

A portfolio's daily asset-allocation breakdown over time

users

get_market_exposure_history

A portfolio's daily directional market exposure per instrument

users

get_copier_stats

An investor's live copier count and assets-under-management tier

users

get_copiers_info

Anonymised info about the people copying your portfolio

users

search_portfolios

Search trader portfolios or Smart Portfolios by free text

users

get_top_assets

A user's top assets ranked by impressions-based score

feeds

get_news_feed

The eToro news feed (editorial and market-news posts)

feeds

get_following_feed

Posts from users the authenticated user follows

feeds

get_for_you_feed

The personalised For You feed for the authenticated user

feeds

get_instrument_feed

The discussion feed for one instrument (market)

feeds

get_user_feed

The posts published by one user

feeds

get_saved_feed

The posts the authenticated user has saved

feeds

get_pinned_posts

The posts a user has pinned to their profile

feeds

get_post

A single post by its UUID, with an inline comments preview

feeds

list_post_comments

The top-level comments on a post

feeds

list_comment_replies

The replies nested under one comment

feeds

list_post_shares

Who shared a post (plain reshares and quote shares)

clubs

get_club_dashboard

The eToro Club dashboard for the authenticated user

notifications

list_notifications

The account's in-app notifications, newest data first

Trading write tools (registered only when ETORO_MCP_ENABLE_TRADING is set)

Toolset

Tool

Description

trading

create_order

Place an order to open a position — not idempotent: every call places a new order

trading

cancel_order

Cancel a pending (not yet executed) order

trading

close_position

Close an open position, fully or partially, at market

trading

cancel_close_order

Cancel a pending close order before it executes

trading

modify_position_sltp

Edit an open position's stop-loss and/or take-profit

Other write tools (registered only when ETORO_MCP_ENABLE_WRITES is set)

Toolset

Tool

Description

watchlists

create_watchlist

Create a new watchlist

watchlists

rename_watchlist

Rename a watchlist

watchlists

delete_watchlist

Delete a watchlist

watchlists

add_watchlist_items

Add items to a watchlist

watchlists

remove_watchlist_items

Remove items from a watchlist

watchlists

update_watchlist_items

Reorder items within a watchlist

watchlists

set_default_watchlist

Set a watchlist as the selected default

watchlists

change_watchlist_rank

Change a watchlist's display position

alerts

create_price_alert

Create a price alert on an instrument

alerts

update_price_alert

Change the target price of an existing price alert

alerts

delete_price_alert

Permanently delete a price alert

notifications

mark_notifications_read

Mark all in-app notifications as read

social

create_post

Create a discussion post on the authenticated user's feed

social

create_poll_post

Create a poll post with 2 to 4 answer options

social

update_post

Edit the authenticated user's own post in-place

social

delete_post

Soft-delete the authenticated user's own post

social

pin_post

Pin one of the authenticated user's own posts to their profile

social

unpin_post

Remove the authenticated user's pin from a post

social

create_comment

Create a top-level comment on a post

social

update_comment

Edit the authenticated user's own comment in-place

social

delete_comment

Soft-delete the authenticated user's own comment

social

create_reply

Create a reply nested under an existing comment

social

update_reply

Edit the authenticated user's own reply in-place

social

delete_reply

Soft-delete the authenticated user's own reply

social

share_post

Share an existing post, as a plain reshare or a quote share

social

upload_media

Upload a JPEG or PNG image (max 8 MB) for use as an attachment; requires ETORO_MCP_UPLOAD_DIR and reads only inside it

social

like_post

Like a post

social

unlike_post

Remove a like from a post

social

like_comment

Like a comment on a post

social

unlike_comment

Remove a like from a comment

social

like_reply

Like a reply (a nested answer to a comment)

social

unlike_reply

Remove a like from a reply

social

save_post

Bookmark a post

social

unsave_post

Remove a post from the saved bookmarks

social

follow_post

Subscribe to notifications on a post

social

unfollow_post

Unsubscribe from notifications on a post

social

vote_poll

Cast a vote on a poll option

social

remove_poll_vote

Remove a vote from a poll option

Configuration

All configuration comes from environment variables — no config files, no flags carrying secrets.

Variable

Default

Purpose

ETORO_API_KEY

— (required)

eToro API key, sent as the x-api-key header

ETORO_USER_KEY

— (required)

eToro user key, sent as the x-user-key header

ETORO_ENV

demo

demo or real — which trading endpoint group tools call. eToro keys are environment-bound, so a mismatched key fails at the API

ETORO_MCP_TOOLSETS

trading core (see table above)

Comma-separated toolset names; all selects every toolset. Unknown names fail startup with the list of valid names

ETORO_MCP_ENABLE_TRADING

off

true/1/yes registers the trading write tools: order placement/cancel, position close, stop-loss/take-profit edits

ETORO_MCP_ENABLE_WRITES

off

true/1/yes registers all other write tools: watchlist/alert mutations, notification mark-read, social posting and reactions

ETORO_MCP_UPLOAD_DIR

— (unset)

The only directory upload_media may read images from. Unset (the default) leaves upload_media unregistered, so the server can never read local files. Paths and symlinks resolving outside the directory are rejected

Getting started

Run straight from the repository with uv:

uvx --from git+https://github.com/florinel-chis/etoro-mcp etoro-mcp

The server speaks stdio by default; pass --transport http --host 127.0.0.1 --port 8000 to serve streamable HTTP at /mcp instead.

Warning: the HTTP endpoint has no authentication — anyone who can reach the port can call every registered tool with your API keys' privileges. The server therefore refuses to bind a non-loopback --host unless --allow-remote is also passed; only use that flag behind an authenticated reverse proxy or an otherwise-restricted network (such as the Docker port-mapping below).

MCP client configuration

Add the server to your MCP client's configuration (the exact file location depends on the client):

{
  "mcpServers": {
    "etoro": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/florinel-chis/etoro-mcp", "etoro-mcp"],
      "env": {
        "ETORO_API_KEY": "your-api-key",
        "ETORO_USER_KEY": "your-user-key",
        "ETORO_ENV": "demo"
      }
    }
  }
}

Or run the Docker image (build it first, see below):

{
  "mcpServers": {
    "etoro": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "-e", "ETORO_API_KEY", "-e", "ETORO_USER_KEY", "-e", "ETORO_ENV", "etoro-mcp"],
      "env": {
        "ETORO_API_KEY": "your-api-key",
        "ETORO_USER_KEY": "your-user-key",
        "ETORO_ENV": "demo"
      }
    }
  }
}

Docker

docker build -t etoro-mcp .

# stdio (for MCP client configs)
docker run -i --rm -e ETORO_API_KEY -e ETORO_USER_KEY etoro-mcp

# streamable HTTP at http://127.0.0.1:8000/mcp
# (-p 127.0.0.1:8000:8000 keeps the unauthenticated endpoint off external interfaces;
#  --host 0.0.0.0 refers to interfaces inside the container and is required for the
#  port mapping to work, hence --allow-remote — the host-side bind stays loopback-only)
docker run --rm -p 127.0.0.1:8000:8000 -e ETORO_API_KEY -e ETORO_USER_KEY \
  etoro-mcp --transport http --host 0.0.0.0 --port 8000 --allow-remote

Safety

  • Trading tools call the demo endpoint group unless ETORO_ENV=real is set. Keys are environment-bound, so a demo key against real (or vice versa) fails at the API rather than trading the wrong account.

  • Write tools are hidden behind two independent gatesETORO_MCP_ENABLE_TRADING for order/position writes and ETORO_MCP_ENABLE_WRITES for everything else (watchlists, alerts, notifications, social). Gated tools are never registered, not merely rejected, so MCP clients cannot discover or call them.

  • The HTTP transport is unauthenticated: anyone who can reach the port can call every registered tool — read balances and positions always, and place or close orders when trading is enabled — using your API keys' privileges. The server refuses non-loopback binds unless --allow-remote is passed; only use that flag behind an authenticated proxy or an otherwise-restricted network (the stdio transport has no such exposure).

  • upload_media reads local JPEG/PNG files and returns a public CDN URL for them — an extra privilege class beyond the API keys themselves. It is therefore triple-gated: the social toolset, ETORO_MCP_ENABLE_WRITES, and ETORO_MCP_UPLOAD_DIR must all be set, and it reads only inside that directory (paths and symlinks resolving outside it are rejected, file content must actually be JPEG/PNG, and the 8 MB limit is checked before the file is read).

  • create_order is not idempotent across calls: each call mints a fresh x-request-id, which is the order's idempotency key, so calling it twice places two orders. (The 429 retry re-sends the same id, so a rate-limited retry cannot double-fill.) Poll fill status with get_order before treating an order as filled — an accepted order can still be rejected.

  • Candle history is capped at roughly 1000 bars per interval with no way to page further back; use a coarser interval (e.g. OneWeek) for deeper history.

  • The API enforces per-group rate quotas (order execution 20 requests/60 s; market data 120/60 s; portfolio and most other groups 60/60 s; eligibility and cost estimates 20/60 s each). Each tool's description names its quota; 429s are retried once, honouring Retry-After.

  • Trading leveraged products is risky. Use at your own risk, and test everything against a demo account first.

Development

uv sync
uv run pytest
uv run ruff check .

Tests are hermetic: all HTTP is mocked with respx and the server is exercised through the in-memory FastMCP client. No credentials or network access are needed to run them. A manual, read-only smoke check against a real demo account lives at scripts/smoke.py.

License

MIT — see LICENSE.

Available Tools

29 tools
check_trading_eligibilityA
Read-only

Per-instrument trading rules: leverage, sizing mode, SL/TP bounds.

Provide instrument_ids and/or symbols (at least one, at most 100 combined). For each instrument returns the minimum position exposure (USD), max units per order, whether opening/closing/partial closes/ market-if-touched orders/trailing stop-loss are allowed, whether units are whole or fractional, whether sizing must be by units, by amount, or either, and per settlement type and direction the valid leverage values, minimum position amount (USD), and stop-loss/take-profit percentage bounds. Call before create_order to pick valid parameters. Rate limit: dedicated 20 requests/60s quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
symbolsNoTicker symbols to check, e.g. AAPL.
instrument_idsNoInstrument ids to check.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, but the description adds valuable behavioral context: rate limit details, constraint of 'at least one, at most 100 combined' parameters, and specifics of what is returned (e.g., min position exposure, allowed order types). No contradiction with annotations.

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

Conciseness4/5

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

The description is front-loaded with purpose, then details returns in a single sentence. It is informative but not excessively verbose. Could slightly tighten but is well-structured.

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

Completeness5/5

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

Given the output schema exists, the description still explains the return fields in text, covering everything from leverage to stop-loss bounds. It also includes usage guidance and rate limits, making it fully complete for an agent to use correctly.

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

Parameters4/5

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

Schema coverage is 100% with descriptions for both parameters, so baseline is 3. The description adds meaning by stating the combined limit (at most 100) and that at least one must be provided, which the schema does not enforce. This adds value.

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

Purpose5/5

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

The description clearly states the tool returns per-instrument trading rules (leverage, sizing mode, SL/TP bounds). It distinguishes itself from sibling tools (all get_* tools for balances, history, prices, etc.) by being the only eligibility checker.

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

Usage Guidelines5/5

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

Explicitly advises 'Call before create_order to pick valid parameters,' providing clear when-to-use guidance. Also mentions rate limit (dedicated 20 requests/60s quota), which helps the agent plan calls.

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

get_aggregated_balancesA
Read-only

Get current balances aggregated across the user's accounts.

Calls GET /api/v1/balances. Returns totalBalance (in display_currency) plus one entry per account with its native-currency balance, the converted displayBalance, and the exchangeRate used. Account types: Trading, Cash, Options, Crypto, MoneyFarm, Spaceship. Amounts are numbers in the stated currency. Rate limit: 60 requests per 60 seconds (default shared quota).

ParametersJSON Schema
NameRequiredDescriptionDefault
account_typesNoRestrict to these account types; omit for all.
display_currencyNoISO 4217 currency code the display* amounts are converted into.USD
include_zero_balancesNoInclude accounts whose balance is zero.
include_equity_detailsNoExpand per-account equity details (buying power, frozen cash, current PnL, used margin; crypto spendable balances).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds valuable context: HTTP method, response structure, rate limit (60 req/60s), and account types. No contradictions.

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

Conciseness5/5

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

Two concise paragraphs, front-loaded with purpose, followed by essential details. Every sentence adds value.

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

Completeness5/5

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

Output schema exists, and description covers response structure, account types, and rate limit. Sufficient for a read-only tool with well-specified parameters.

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

Parameters3/5

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

Input schema has 100% description coverage, so parameters are fully documented. The description adds minimal value beyond the schema (e.g., mentions account types already in enum). Baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states it retrieves current balances aggregated across accounts, listing specific return fields and account types. It implies aggregation but does not explicitly differentiate from siblings like get_balance or get_balances_by_type.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. Missing information on when to choose this over get_balance, get_balances_by_type, or get_balance_history.

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

get_balanceA
Read-only

Get the current balance of one specific account.

Calls GET /api/v1/balances/{accountType}/{accountId}. Account types: Trading, Cash, Options, Crypto, MoneyFarm, Spaceship. Returns the account's balance in its native currency plus the displayBalance converted into display_currency. With include_equity_details, Trading accounts also report available buying power, frozen cash, current PnL, and used margin. Rate limit: 60 requests per 60 seconds (default shared quota).

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idYesAccount id, as returned by the balance tools.
account_typeYesType of the account.
display_currencyNoISO 4217 currency code the display* amounts are converted into.USD
include_zero_balancesNoInclude accounts whose balance is zero.
include_equity_detailsNoExpand per-account equity details (buying power, frozen cash, current PnL, used margin; crypto spendable balances).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, consistent with a read operation. The description adds behavior beyond annotations: return format, conversion to display_currency, equity details for Trading, and a rate limit of 60 req/60s. No contradiction.

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

Conciseness4/5

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

The description is concise at ~120 words, front-loaded with purpose. It is well-structured but could be slightly tighter; however, it efficiently uses each sentence.

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

Completeness5/5

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

Given 5 parameters and an output schema, the description covers endpoint, account types, return behavior, and rate limits. It is complete enough for correct tool invocation without gaps.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by explaining the effect of include_equity_details, the conversion to display_currency, and enumerating account types, which enhances understanding beyond the schema.

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

Purpose5/5

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

The description states 'Get the current balance of one specific account', providing a specific verb and resource. It lists account types and distinguishes from sibling tools like get_aggregated_balances by focusing on a single account.

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

Usage Guidelines4/5

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

The description explains the endpoint, account types, and when to use include_equity_details. It implies single-account usage but does not explicitly exclude aggregated use cases; still, the context is clear.

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

get_balance_historyA
Read-only

Get daily balance snapshots over a date range.

Calls GET /api/v1/balances/history (or the {accountType} / {accountType}/{accountId} variant when narrowed). Dates are YYYY-MM-DD; the default range is the last 30 days, history covers at most the last 12 months, and a single range spans at most 365 days — the API answers 404 when no data exists for the range. Each snapshot carries total cash, invested amount, PnL, and balance, both in native currencies and converted into display_currency. Rate limit: 60 requests per 60 seconds (default shared quota).

ParametersJSON Schema
NameRequiredDescriptionDefault
to_dateNoPeriod end, YYYY-MM-DD. Defaults to today (UTC).
from_dateNoPeriod start, YYYY-MM-DD. Defaults to 30 days before to_date.
account_idNoLimit history to one account; requires account_type.
account_typeNoLimit history to one account type; omit for all accounts.
display_currencyNoISO 4217 currency code the display* amounts are converted into.USD

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Despite readOnlyHint already being provided, the description adds substantial behavioral context: the HTTP method (GET), date format (YYYY-MM-DD), default range (30 days), maximum history (12 months), maximum single range (365 days), error condition (404 when no data), response fields (cash, invested, PnL, balance, currency conversion), and rate limit (60 requests per 60 seconds). No contradictions with annotations.

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

Conciseness4/5

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

The description is relatively concise (three sentences) and front-loaded with the core purpose. The second sentence is dense but informative, combining multiple details. A minor restructuring could improve readability, but it is still efficient.

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

Completeness5/5

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

Given the tool's complexity (5 parameters, output schema, annotations), the description covers all essential aspects: purpose, API method, parameter constraints, error handling, rate limiting, and response fields. There are no obvious gaps for an agent to use the tool correctly.

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

Parameters4/5

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

Schema description coverage is 100%, so each parameter is already documented. The description adds value by explaining overarching constraints (date range limits, default range) that go beyond individual parameter descriptions, providing context for how parameters interact.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get daily balance snapshots over a date range.' It specifies the resource (balance history) and the action (retrieving daily snapshots), and hints at narrowing by account type or ID, distinguishing it from sibling tools like get_balance or get_aggregated_balances.

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

Usage Guidelines3/5

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

The description implies when to use the tool (to retrieve historical daily balances) but does not explicitly contrast it with sibling tools or provide when-not-to-use guidance. It does mention date range limits and defaults, which help the agent decide if the tool fits the requested range.

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

get_balances_by_typeA
Read-only

Get current balances for every account of one account type.

Calls GET /api/v1/balances/{accountType}. Account types: Trading, Cash, Options, Crypto, MoneyFarm, Spaceship. Returns totalBalance (in display_currency) and per-account balances in their native currency alongside the converted displayBalance. Rate limit: 60 requests per 60 seconds (default shared quota).

ParametersJSON Schema
NameRequiredDescriptionDefault
account_idsNoRestrict to these account ids; omit for all of the type.
account_typeYesAccount type to query.
display_currencyNoISO 4217 currency code the display* amounts are converted into.USD
include_zero_balancesNoInclude accounts whose balance is zero.
include_equity_detailsNoExpand per-account equity details (buying power, frozen cash, current PnL, used margin; crypto spendable balances).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description adds value by specifying the HTTP method (GET), the exact endpoint pattern, and the rate limit (60 requests/60s). It does not contradict annotations and provides useful behavioral context beyond what annotations offer.

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

Conciseness5/5

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

The description is concise (5 sentences), front-loaded with the main purpose, and each sentence adds value: purpose, endpoint, account types, return structure, and rate limit. No fluff or redundant information.

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

Completeness5/5

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

For a read-only query tool with 5 parameters (schema fully described) and an output schema, the description covers purpose, endpoint, account types, key return fields, and rate limiting. It is sufficiently complete without need for more detail.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description does not add significant parameter-level information beyond what the schema already provides (e.g., enum values, defaults, descriptions). The only extra context is about the return structure, not parameters.

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

Purpose5/5

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

Description clearly states 'Get current balances for every account of one account type', providing a specific verb, resource, and scope. It lists account types and mentions the API endpoint, effectively distinguishing it from siblings like get_balance (single account) and get_aggregated_balances (cross-type).

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

Usage Guidelines4/5

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

The description gives clear context for when to use the tool (querying balances by account type) but does not explicitly state when not to use it or provide alternatives. It mentions the account types and endpoint, offering sufficient guidance though lacking formal exclusions.

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

get_candlesA
Read-only

Get OHLCV candles for one instrument.

Returns {"instrumentId": int, "interval": str, "candles": [{"time": ISO-8601 period start, "open": float, "high": float, "low": float, "close": float, "volume": float}]}. Prices are in the instrument's quote currency; the newest bar can be the still-forming session.

History depth is capped at about 1000 bars per interval — there is no way to page further back in time (no from/to parameters exist), so at OneDay one request covers roughly four years; use a coarser interval such as OneWeek for deeper history. 'direction' only changes ordering: asc and desc return the same most-recent window, oldest-first vs newest-first. An unknown instrument id yields no candle data and this tool raises an error rather than returning an empty series.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
countNoNumber of candles, maximum 1000.
intervalNoCandle interval: OneMinute, FiveMinutes, TenMinutes, FifteenMinutes, ThirtyMinutes, OneHour, FourHours, OneDay, or OneWeek.OneDay
directionNo'asc' = oldest first, 'desc' = newest first.asc
instrument_idYesInstrument id, e.g. 1001 for AAPL.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only indicate readOnlyHint=true, but the description adds critical details: return format with fields, history cap, rate limit (120 req/60s), error behavior for unknown instrument, and that direction only affects ordering. It fully discloses operational traits.

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

Conciseness4/5

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

The description is detailed but well-structured, with clear sentences explaining return format, history limits, rate limits, and edge cases. It is appropriately sized for the complexity, though slightly verbose in places. Front-loads key purpose.

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

Completeness5/5

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

Given the presence of output schema and annotations, the description covers all necessary aspects: purpose, constraints (history cap, rate limit), behavioral details (error raising, ordering), and return format. It is complete and leaves no obvious gaps.

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

Parameters4/5

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

The input schema already covers all 4 parameters with descriptions (100% coverage). The description adds value by explaining that 'direction' does not change the data window, only ordering, and that unknown instrument_id raises an error. This goes beyond the schema's basic descriptions.

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

Purpose5/5

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

The description clearly states the tool retrieves OHLCV candles for one instrument, with a specific verb ('get') and resource ('candles'). It distinguishes from siblings by focusing on historical price data, a unique function among the listed tools.

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

Usage Guidelines4/5

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

Provides explicit context on when to use this tool (e.g., for historical price data), including limitations (1000 bar cap, no paging) and guidance on interval selection for deeper history. It does not explicitly state when not to use, but the context is clear enough.

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

get_close_order_infoA
Read-only

Look up a close order's status by its order id.

Same status codes as get_order (1 Received … 10 RejectedPartiallyFilled); positionsToClose and positionExecutions show which positions closed and at what price. Returns HTTP 404 if the close order does not exist. Rate limit: shares a 60 requests/60s pool with get_order.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYesClose-order id returned by close_position.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description adds valuable behavioral details: HTTP 404 if not found, rate limit sharing a 60req/60s pool with get_order, and the presence of specific fields (positionsToClose, positionExecutions). This exceeds the minimum expected from annotations.

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

Conciseness5/5

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

The description is two sentences with clear front-loading of purpose in the first sentence. Every word contributes meaning, with no redundancy or filler.

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

Completeness5/5

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

Given the tool's simplicity (1 parameter, output schema exists), the description covers all essential aspects: purpose, status code reference, field details, error scenario, and rate limiting. It is complete without relying on output schema documentation.

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

Parameters3/5

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

The input schema has 100% description coverage for the single parameter order_id, which is adequately described as 'Close-order id returned by close_position.' The description mainly restates this without adding extra semantic meaning, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states 'Look up a close order's status by its order id,' specifying a specific action (look up), resource (close order's status), and method (by order id). It distinguishes from siblings like get_order by targeting close orders specifically.

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

Usage Guidelines4/5

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

The description gives context by referencing get_order's status codes and mentioning fields like positionsToClose and positionExecutions. It implies usage for close orders but does not explicitly state when to use this tool versus alternatives like get_order.

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

get_closing_pricesA
Read-only

Get the latest official closing prices per instrument.

The API returns closing prices for every instrument in one response; this tool filters to 'instrument_ids' when given and truncates to 'limit'. Returns {"results": [{"instrumentId": int, "officialClosingPrice": float, "daily"/"weekly"/"monthly": {"price": float, "date": ISO-8601}}]} — daily is the previous trading day's close, weekly the previous week's, monthly the previous month's. A price of -1 with date 0001-01-01 means no data for that period.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of instruments to return.
instrument_idsNoOptional instrument ids to keep; omit for all instruments.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Beyond readOnlyHint, description discloses rate limit, return format with sentinel values for missing data, and behavior of filtering/truncation. Adds significant value over annotations.

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

Conciseness5/5

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

Front-loaded with purpose, each sentence adds new information (filtering, return structure, sentinel, rate limit). No redundancies or fluff.

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

Completeness5/5

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

Given simple parameters and presence of output schema, description fully explains tool behavior, edge cases, and constraints. No gaps remain.

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

Parameters4/5

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

Schema coverage is 100%, but description adds context like 'truncates' for limit and 'filters' for instrument_ids, clarifying behavior beyond schema descriptions.

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

Purpose5/5

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

Description clearly states 'Get the latest official closing prices per instrument', specifying the action and resource. It differentiates from sibling tools by focusing on closing prices with optional filtering.

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

Usage Guidelines4/5

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

Description explains that the tool returns closing prices for all instruments and then filters/truncates, but does not explicitly state when to use this tool over alternatives like get_candles. Still provides clear context.

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

get_curated_listsA
Read-only

Get eToro's curated investment lists available to the user.

Each list carries uuid, name, description, and the instrument IDs it contains (resolve them via the market-data tools). Dedicated quota of 60 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of curated lists to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate read-only; description adds quota information (60 requests per 60 seconds) and return structure, enhancing transparency beyond annotations.

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

Conciseness5/5

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

Three concise sentences: purpose, return structure, quota. No waste, front-loaded with the main action.

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

Completeness5/5

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

Output schema exists and description mentions key fields. For a read-only tool with one optional parameter and output schema, the description is sufficiently complete.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter 'limit', with full description (default, min, max). Description adds no additional meaning beyond the schema, so baseline of 3 is appropriate.

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

Purpose5/5

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

Clearly states it retrieves eToro's curated investment lists, with a specific verb and resource. This distinguishes it from sibling tools like get_public_watchlists or list_watchlists.

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

Usage Guidelines3/5

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

Mentions resolving instrument IDs via market-data tools, providing some usage context, but lacks explicit guidance on when to use this tool versus alternatives or when not to use it.

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

get_default_watchlistA
Read-only

Get the items of the authenticated user's default watchlist.

Returns items with itemId (instrument or person ID), itemType ('Instrument' or 'Person'), itemRank (position in the list), symbol and displayName when market metadata is included, and itemAddedDate (ISO 8601). Shares the watchlist read quota of 60 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of items to return (all when omitted).
items_per_pageNoItems per page for pagination.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true. The description adds value by listing return fields (itemId, itemType, itemRank, symbol, displayName, itemAddedDate) and noting the shared watchlist read quota (60 requests per 60 seconds). No contradictions with annotations.

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

Conciseness5/5

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

The description is concise with three sentences: purpose, return fields, and quota. Every sentence adds value, with no redundant or vague wording. Front-loaded with the core function.

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

Completeness4/5

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

Given that an output schema exists and parameter descriptions are complete, the description covers purpose, key return fields, and quota. It does not elaborate on pagination behavior or error cases, but these are typically inferred from parameters and common patterns. Slight room for more context, but overall adequate.

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

Parameters3/5

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

Schema coverage is 100%, so the schema fully documents both parameters (limit, items_per_page). The description does not add any additional meaning or usage hints beyond the schema, hence baseline score of 3 is appropriate.

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

Purpose5/5

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

The description clearly states that the tool retrieves items of the authenticated user's default watchlist, using specific verb ('Get') and resource ('items of default watchlist'). It distinguishes from siblings like 'get_watchlist' (by ID) and 'list_watchlists' (all watchlists) by focusing on 'default'.

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

Usage Guidelines2/5

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

The description does not provide any guidance on when to use this tool versus its siblings. It lacks explicit when-to-use, when-not-to-use, or alternative tool references. Given 29 sibling tools, this omission reduces usability for an AI agent.

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

get_instrument_detailsA
Read-only

Get display data for instruments by id: name, symbol, type, exchange.

Returns {"results": [{"instrumentId": int, "displayName": str, "symbol": str, "instrumentTypeId": int, "exchangeId": int, "stocksIndustryId": int, "priceSource": str, "isInternalInstrument": bool}]}. isInternalInstrument true means the instrument is restricted from public trading. Use search_instruments to resolve a ticker to an instrumentId first.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
instrument_idsYesInstrument ids to look up, e.g. [1001].

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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

Discloses that isInternalInstrument indicates restricted trading, and includes rate limit (120 requests/60s). These details go beyond the readOnlyHint annotation, adding valuable behavioral context.

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

Conciseness4/5

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

Concise and well-structured, front-loaded with purpose and key output details. The sample return and rate limit are useful, though the description could be slightly more streamlined.

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

Completeness5/5

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

For a single-parameter tool with full schema coverage and an output schema, the description is complete: it explains the return structure, a key boolean field, rate limits, and prerequisite step (resolve ID).

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

Parameters3/5

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

Schema coverage is 100% and the description's example ([1001]) adds minimal value beyond the schema description. No additional semantics about parameter behavior (e.g., maximum IDs) are provided.

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

Purpose5/5

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

The description clearly states the tool retrieves display data for instruments by ID, listing specific fields like name, symbol, type, exchange. It distinguishes itself from sibling 'search_instruments' by implying this tool is for known IDs.

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

Usage Guidelines5/5

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

Explicitly instructs to use 'search_instruments' to resolve a ticker to an instrumentId first, providing clear when-to-use and alternative. Also mentions rate limit context.

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

get_market_recommendationsA
Read-only

Get personalized market recommendations for the authenticated user.

Returns responseType and instrumentIds — the recommended instrument IDs, resolvable via the market-data tools. Dedicated quota of 60 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of recommendations to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Adds transparency about the dedicated quota (60 requests per 60 sec) and the return format (responseType and instrumentIds), beyond the readOnlyHint annotation.

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

Conciseness5/5

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

Two concise sentences that front-load the purpose and add essential behavior info without redundancy.

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

Completeness5/5

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

For a simple tool with one parameter, full schema, output schema, and clear annotations, the description covers quota and resolvability adequately.

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

Parameters3/5

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

Only one parameter (limit) with full schema description; the description does not add further parameter context beyond what the schema provides.

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

Purpose5/5

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

The description clearly states 'Get personalized market recommendations' with a specific verb and resource, and it's distinct from sibling tools like search_instruments or get_instrument_details.

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

Usage Guidelines3/5

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

The description implies the tool is for getting personalized recommendations but does not explicitly contrast it with alternatives or state when not to use it.

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

get_orderA
Read-only

Look up an order's status by order_id or reference_id (exactly one).

Status ids: 1 Received, 2 Placed, 3 Filled, 4 Rejected, 5 PartiallyFilled, 6 PendingCancel, 7 Canceled, 8 Expired, 9 CanceledPartiallyFilled, 10 RejectedPartiallyFilled. A filled order lists its positions under positionExecutions (positionId, state, remaining units, execution price and fees). Rates are absolute instrument prices; timestamps ISO 8601. Rate limit: shares a 60 requests/60s pool with get_close_order_info.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idNoNumeric order id returned by create_order.
reference_idNoThe referenceId (UUID) returned by create_order — the x-request-id the order was submitted with.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

The description complements the readOnlyHint annotation by detailing the output for filled orders (positionExecutions) and the rate limit policy shared with get_close_order_info. No contradictions with annotations.

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

Conciseness5/5

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

The description is highly concise, front-loading the core purpose. Every sentence adds value: the lookup action, identifier constraint, status list, filled order behavior, and rate limit note. No unnecessary words.

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

Completeness5/5

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

Given the availability of an output schema, the description does not need to detail return values. It covers all necessary aspects: lookup mechanism, status codes, filled order details, and rate limiting, making it complete for an agent to use correctly.

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

Parameters5/5

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

While the input schema already describes both parameters, the description adds critical context: 'exactly one' must be provided, and reference_id is the UUID from create_order. This significantly enhances understanding beyond the schema.

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

Purpose5/5

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

The description clearly states the verb 'look up', the resource 'order status', and the required input constraints (exactly one of order_id or reference_id). It effectively distinguishes from sibling tools like get_close_order_info, which shares a rate limit but serves a different purpose.

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

Usage Guidelines4/5

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

The description provides specific guidance that exactly one identifier must be used, and details the status codes. However, it does not explicitly state when not to use this tool or contrast it with alternatives beyond the rate-limit mention.

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

get_pnlA
Read-only

Account P&L: portfolio snapshot with unrealized P&L per position.

Returns credit (available trading balance, USD), bonusCredit, the account-level unrealizedPnl (sum across open positions, account currency), and open positions each carrying an unrealizedPnl figure in the account currency, plus mirror summaries with closedPositionsNetProfit. Total P&L = sum of position unrealizedPnl (own and mirror positions) + sum of mirror closedPositionsNetProfit. Rate limit: shares a 60 requests/60s pool with get_portfolio and get_portfolio_breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum positions returned.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, which the description respects. Beyond that, it discloses the rate limit and the calculation formula for total P&L, providing useful behavioral context not present in the annotations.

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

Conciseness5/5

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

The description is concise and front-loaded with the main purpose. It efficiently includes the rate limit and calculation formula without unnecessary verbosity. Every sentence adds value.

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

Completeness5/5

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

Given the output schema exists and input schema covers the single parameter fully, the description provides sufficient context: it explains return components, rate limiting, and total P&L calculation. No gaps for this complexity level.

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

Parameters3/5

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

The only parameter (limit) is fully described in the input schema with default, min, max, and description. The tool description adds no additional meaning beyond the schema, so baseline score of 3 is appropriate.

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

Purpose4/5

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

The description clearly states it returns a portfolio snapshot with unrealized P&L per position, specifying the components (credit, bonusCredit, unrealizedPnl, etc.). However, it does not explicitly differentiate itself from siblings like get_portfolio or get_portfolio_breakdown beyond mentioning a shared rate limit.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives. The description mentions a shared rate limit with get_portfolio and get_portfolio_breakdown but does not clarify the distinct use cases for each.

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

get_portfolioA
Read-only

Aggregated portfolio: account totals plus one aggregate per instrument.

Account totals are in the account currency (usually USD): accountAvailableCash, accountFrozenCash, accountCurrentPnl, accountTotalUsedMargin, accountBalance, and accountTotalValue (= available cash + used margin + current P&L). Each instrument aggregate carries net units (positive = long, negative = short), average open rate and leverage, margin, exposure, and unrealized return (accountCurrencyReturn) in the account currency. Filters narrow the instrument aggregates only — account totals ignore them. Rate limit: shares a 60 requests/60s pool with get_portfolio_breakdown and get_pnl.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum instrument aggregates returned.
mirror_idsNoRestrict to these copy-trading mirror ids; 0 = directly held.
instrument_idsNoRestrict instrument aggregates to these instrument ids.
conversion_modeNoConversion source for non-USD assets while their market is closed; the API default is eToroApp.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior4/5

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

Annotations provide readOnlyHint: true. The description adds value by disclosing that filters only affect instrument aggregates, not account totals, and mentions rate limit sharing with siblings, enhancing transparency beyond annotations.

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

Conciseness5/5

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

Description is efficient and well-structured: first sentence states purpose, then detailed fields, then filter caveat, then rate limit. No redundancy, every sentence adds value.

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

Completeness4/5

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

Given output schema exists, description covers key points: field details, filter behavior, rate limit. Could mention that limit applies to instrument aggregates, but largely complete for the tool's complexity.

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

Parameters3/5

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

Schema coverage is 100%, so baseline is 3. The description adds context that filters narrow instrument aggregates only, but does not elaborate on all parameters (e.g., conversion_mode not mentioned). Value added is moderate.

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

Purpose5/5

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

The description clearly states 'Aggregated portfolio: account totals plus one aggregate per instrument', using specific verbs and resource. It differentiates from sibling get_portfolio_breakdown by mentioning shared rate limit and contrasting filter behavior.

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

Usage Guidelines3/5

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

Usage is implied as retrieving aggregated portfolio data, but no explicit when-to-use or alternatives are given. The description notes filter behavior and rate limit sharing, but lacks when-not-to-use guidance.

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

get_portfolio_breakdownA
Read-only

Position-level portfolio snapshot: open positions and pending orders.

Returns credit (available trading balance, USD), bonusCredit, open positions (positionID, instrumentID, isBuy — true long / false short, leverage, amount = invested margin in USD, units, openRate, openDateTime ISO 8601, stop-loss/take-profit rates as absolute prices, mirrorID — 0 = manual position, non-zero = copy trading), pending market-if-touched orders (pendingOrders), pending market opens (ordersForOpen), and pending closes (ordersForClose), plus copy-trading mirror summaries. Cheaper than get_pnl — no unrealized P&L fields. Rate limit: shares a 60 requests/60s pool with get_portfolio and get_pnl.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum entries per list (positions, orders).

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true. The description adds context about returned fields (credit, bonusCredit, positions with detailed attributes, pending orders) and rate limit sharing. It does not disclose any additional behavioral concerns beyond what annotations imply, but adds useful detail.

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

Conciseness4/5

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

The description is somewhat lengthy but efficiently packs detailed information about returned fields and usage hints. It is front-loaded with the purpose and uses a bullet-like structure via commas, which is adequate.

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

Completeness4/5

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

Given the output schema exists, the description thoroughly explains the return values including position fields, pending orders, and copy-trading summaries. It provides a comprehensive overview, though some minor structural details of orders are not explicitly enumerated.

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

Parameters3/5

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

The input schema has 100% coverage with a description for the single 'limit' parameter. The tool description does not add additional meaning about the parameter beyond what the schema provides, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the tool returns a 'Position-level portfolio snapshot: open positions and pending orders.' It is specific about the resource and scope, and contrasts with siblings like get_pnl and get_portfolio.

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

Usage Guidelines4/5

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

The description explicitly says it is 'Cheaper than get_pnl — no unrealized P&L fields.' and notes the rate limit pool shared with get_portfolio and get_pnl, giving clear context for when to use. It could be more explicit about exact conditions, but the guidance is strong.

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

get_profileA
Read-only

Get the authenticated user's identity and the scopes their keys carry.

Calls GET /api/v1/me. Returns gcid (global customer id), realCid and demoCid (real/demo account customer ids), username, first/last name when set, playerLevel (1 Bronze, 2 Platinum, 3 Gold, 4 Internal, 5 Silver, 6 PlatinumPlus, 7 Diamond) with its name, and the OAuth scopes granted to the credentials — useful to verify keys and to see which endpoint groups are accessible. Rate limit: 60 requests per 60 seconds (default shared quota).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true. The description adds context: the HTTP method (GET), specific endpoint path, detailed list of returned fields, and a rate limit of 60 requests per 60 seconds. No contradiction with annotations.

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

Conciseness5/5

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

The description is concise, front-loaded with the core purpose, followed by specific details and rate limit. Every sentence adds value with no redundancy.

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

Completeness5/5

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

Given no parameters, a readOnly annotation, and an output schema (so description need not detail all return fields), the description still lists all key fields and rate limit, making it fully informative.

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

Parameters4/5

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

The tool has zero parameters, and the input schema is empty. With 100% schema coverage, no additional parameter description is needed. Baseline score of 4 applies.

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

Purpose5/5

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

The description clearly states it retrieves the authenticated user's identity and OAuth scopes, lists specific return fields, and names the HTTP endpoint. This is a specific verb+resource that distinguishes it from sibling tools like get_order or get_balance.

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

Usage Guidelines4/5

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

The description includes 'useful to verify keys and to see which endpoint groups are accessible,' providing clear context for when to use it. It doesn't explicitly state when not to use it, but given it takes no parameters, this is adequate.

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

get_public_watchlistsA
Read-only

List another user's public watchlists by their numeric user ID.

Returns the same shape as list_watchlists: watchlistId, name, watchlistType, totalItems, watchlistRank, and up to items_per_watchlist items each. Shares the watchlist read quota of 60 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of watchlists to return.
user_idYeseToro user ID whose public watchlists to retrieve.
items_per_watchlistNoItems to include per watchlist.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark readOnlyHint=true. Description adds context: lists only public watchlists, shares read quota, and specifies return shape (fields listed). Adequate disclosure beyond annotations.

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

Conciseness5/5

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

Two concise sentences, front-loaded with purpose. No superfluous words.

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

Completeness5/5

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

Output schema exists, so return values are covered. Description adds quota and shape details. Sufficient for the tool's complexity.

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

Parameters3/5

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

Schema covers all 3 parameters with descriptions (100% coverage). Description does not add parameter details beyond schema, so baseline 3 is appropriate.

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

Purpose5/5

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

Clear verb (List), specific resource (another user's public watchlists), and qualifier (by numeric user ID). Distinguishes from sibling list_watchlists which likely lists own watchlists.

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

Usage Guidelines4/5

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

Provides quota constraint (60 req/60s) and states similarity to list_watchlists shape, guiding agent on when to use. Lacks explicit when-not or alternatives but still clear.

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

get_ratesA
Read-only

Get real-time bid/ask quotes for instruments.

Recommended before placing an order. Returns {"results": [{"instrumentId": int, "bid": float (sell price), "ask": float (buy price), "lastExecution": float, "conversionRateBid": float, "conversionRateAsk": float (instrument currency to USD), "date": ISO-8601 quote timestamp}]}.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
instrument_idsYesInstrument ids to quote, e.g. [1001, 1002].

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations (readOnlyHint=true) match description. Description adds rate limit context and output format, though no further behavioral traits beyond what annotations imply.

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

Conciseness5/5

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

Concise: three sentences covering purpose, output example, and rate limit. Information is front-loaded and well-structured.

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

Completeness5/5

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

Complete for a simple tool with one parameter and output schema. Includes rate limit, which is critical for usage. No missing elements.

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

Parameters4/5

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

Schema coverage is 100%, and description provides example usage (e.g., [1001, 1002]) and output structure, adding value beyond schema.

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

Purpose5/5

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

Clearly states it retrieves real-time bid/ask quotes for instruments. Output structure is provided, distinguishing it from sibling tools like get_candles or get_closing_prices.

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

Usage Guidelines4/5

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

Explicitly recommends use before placing an order. Mentions rate limit, providing practical guidance. Does not explicitly list alternatives, but purpose is clear.

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

get_trading_cost_estimateA
Read-only

Estimate the costs of a hypothetical open order without placing it.

Takes the same arguments as create_order (exactly one of symbol/instrument_id, exactly one of amount/units/contracts) and returns the cost breakdown: one entry per cost type (markup, marketSpread, transactionFee, overnightFee, overWeekendFee, sdrt) with an amount and currency, plus the quote timestamp (ISO 8601). Rate limit: dedicated 20 requests/60s quota.

ParametersJSON Schema
NameRequiredDescriptionDefault
unitsNoPosition size in asset units.
amountNoPosition size as money in order_currency (typically USD).
symbolNoTicker symbol, e.g. AAPL. Alternative to instrument_id.
leverageNoLeverage; 1 = no leverage.
contractsNoPosition size in contracts (futures).
order_typeNomkt = market, mit = market-if-touched.mkt
transactionYesTrade direction.
trigger_rateNoAbsolute trigger price; required when order_type is mit.
instrument_idNoInstrument id. Alternative to symbol.
order_currencyNoCurrency of amount, typically usd.
settlement_typeNoSettlement type for the hypothetical open.cfd

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the description's 'without placing it' is consistent. It adds value by detailing the return format and a dedicated rate limit (20 requests/60s), but lacks information on error handling or permissions.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, followed by concise details on arguments and return. No wasted words; every sentence adds essential information.

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

Completeness4/5

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

Given 11 parameters and output schema existence, the description covers argument constraints, return structure, and rate limit. It does not mention authentication or prerequisites, but the read-only nature reduces need. Could elaborate on usage scenarios.

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

Parameters4/5

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

Schema coverage is 100%, baseline 3. The description adds the constraint 'exactly one of symbol/instrument_id and exactly one of amount/units/contracts', which clarifies the otherwise optional schema entries. This improves parameter understanding.

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

Purpose5/5

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

The description clearly states the verb 'estimate' and the resource 'costs of a hypothetical open order'. It distinguishes itself from create_order (a sibling-like tool) by emphasizing it does not place the order, making the purpose specific and unambiguous.

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

Usage Guidelines4/5

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

The description implies usage before placing an order ('without placing it') and references create_order arguments, but does not explicitly state when to avoid this tool or compare to other cost-related tools among siblings.

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

get_watchlistA
Read-only

Get a single watchlist owned by the authenticated user, by ID.

Items are paginated with page_number (zero-based) and items_per_page. Returns the watchlist's metadata plus its items: itemId, itemType ('Instrument' or 'Person'), itemRank, symbol, and itemAddedDate (ISO 8601). Shares the watchlist read quota of 60 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_numberNoZero-based page of items to return.
watchlist_idYesUnique identifier of the watchlist.
items_per_pageNoItems per page.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true, indicating read-only behavior. The description adds significant context: pagination details (zero-based page_number, items_per_page), rate limit (60 requests per 60 seconds), and the return structure (metadata plus items with specific fields). This goes well beyond the annotations.

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

Conciseness5/5

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

The description is three sentences, with the first sentence clearly stating the core purpose. Every sentence adds necessary information: purpose, pagination details, and rate limit. No redundant or extraneous content.

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

Completeness5/5

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

Given the tool has 3 parameters, pagination, a rate limit, and an output schema, the description covers all essential aspects: what it retrieves, how pagination works, the rate limit, and what the response contains. It is fully complete for agent understanding.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description adds value by clarifying that page_number is zero-based and that items_per_page has a default and max (implicitly from schema but reinforced). It also explains the return fields (itemId, itemType, etc.), which helps the agent understand parameter effects on output, even though output schema exists.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Get a single watchlist owned by the authenticated user, by ID.' It specifies the verb 'get', the resource 'watchlist', and the scope 'by ID'. This distinguishes it from sibling tools like list_watchlists (which lists all watchlists) and get_default_watchlist (which gets the default).

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

Usage Guidelines3/5

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

The description implies usage for fetching a specific watchlist by ID but does not explicitly provide guidance on when to use this tool versus alternatives, such as using list_watchlists to obtain IDs or get_default_watchlist for the default list. No when-not or exclusions are mentioned.

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

list_cash_transactionsA
Read-only

List transactions of a cash account, newest pages first.

Calls GET /api/v1/money/accounts/cash/{accountId}/transactions. Paginated by cursor: pass pagination.nextPageToken from one call as page_token to fetch the next page; nextPageToken null (or hasNext false) means the last page. Amounts are decimal strings in ISO 4217 currencies; postedAt is an ISO 8601 timestamp. transactionType is one of card, internalTransfer, bankTransfer, balanceAdjustment; direction is debit or credit; status is one of failed, authorized, settled, rejected, returned, expired, unknown. Rate limit: 60 requests per 60 seconds (default shared quota).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoPage size; the API allows at most 500.
account_idYesCash account id (UUID), from the Cash entries of the balance tools.
page_tokenNoOpaque cursor from a previous page's pagination.nextPageToken.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true, and the description adds substantial behavioral details: pagination mechanism, field types (ISO 8601 timestamps, decimal strings), transaction types, direction, statuses, and rate limit. No contradictions with annotations.

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

Conciseness4/5

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

The description is a single paragraph with clear, front-loaded purpose. It is informative without being verbose, though it could be slightly more concise by moving some inline field explanations to the schema.

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

Completeness4/5

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

Given the presence of an output schema, the description sufficiently covers pagination, field formats, and status values. It provides enough context for an agent to use the tool correctly, though it does not explain all edge cases.

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

Parameters3/5

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

The input schema has 100% coverage with descriptions for all parameters. The description adds minimal extra meaning beyond the schema, such as mentioning 'newest pages first' and the response structure. Baseline of 3 is appropriate.

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

Purpose5/5

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

The description clearly states it lists transactions of a cash account with newest pages first, and mentions the API endpoint. This verb+resource combination distinguishes it from sibling tools, which focus on balances, trading, and other financial data.

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

Usage Guidelines3/5

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

The description provides detailed pagination instructions but does not explicitly state when to use this tool versus alternatives. No alternative tools for transaction listing exist among siblings, so the guidance is adequate but not explicit.

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

list_exchangesA
Read-only

List exchanges (id and description) for resolving exchangeId values.

Returns {"results": [{"exchangeId": int, "description": str}]}.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of exchanges to return.
exchange_idsNoOptional exchange ids to look up; omit for all exchanges.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

Annotations indicate readOnlyHint=true, and description adds valuable context: returns specific JSON structure and shares a rate limit pool. No contradictions, and it discloses behavioral traits beyond annotations.

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

Conciseness5/5

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

Description is concise with three sentences. The first sentence states purpose, second gives return format in a code block, third mentions rate limit. No unnecessary words.

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

Completeness4/5

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

Return format is specified, parameters are fully covered, and rate limit is mentioned. While an explicit output schema is not provided, the description gives enough detail. Tool is simple, so completeness is high.

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

Parameters3/5

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

Schema description coverage is 100%, so the existing schema already documents both parameters. The description does not add additional meaning for the parameters beyond what is in the schema, so baseline of 3 is appropriate.

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

Purpose5/5

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

Description clearly states 'List exchanges (id and description) for resolving exchangeId values.' It specifies the verb 'list' and resource 'exchanges', and the purpose is distinct from sibling tools like search_instruments or list_instrument_types.

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

Usage Guidelines4/5

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

Description explains when to use (to resolve exchangeId values) and mentions optional parameters for filtering. However, it does not explicitly state when not to use or provide alternatives, but given the simplicity, it is adequate.

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

list_instrument_typesA
Read-only

List instrument types (stocks, crypto, ETFs, ...) by id.

Resolves instrumentTypeId values returned by other market-data tools. Returns {"results": [{"instrumentTypeId": int, "description": str}]}.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of types to return.
instrument_type_idsNoOptional instrument type ids to look up; omit for all types.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description adds the rate limit sharing with the market-data pool, providing additional behavioral context beyond annotations. No contradictions.

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

Conciseness5/5

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

The description is very concise with three sentences. It front-loads the purpose, then explains the use case and a behavioral note (rate limit). No wasted words.

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

Completeness5/5

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

Given the presence of an output schema, the description does not need to explain return values. It covers the essential context: what the tool does, when to use it, and rate limitations. Complete for a simple listing tool.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the role of instrument_type_ids in resolving IDs and clarifying the limit's purpose. It complements but does not merely repeat schema info.

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

Purpose5/5

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

The description clearly states the tool lists instrument types by id and resolves instrumentTypeId values. It uses specific verbs and distinguishes from sibling tools that deal with different market data or instrument details.

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

Usage Guidelines4/5

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

The description explicitly says it resolves instrumentTypeId values returned by other market-data tools, indicating when to use it. It implies context but does not list exclusions or alternatives, though the sibling set makes differentiation straightforward.

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

list_price_alertsA
Read-only

List the active price alerts on the account.

Returns up to limit alerts, each with its alertId (UUID), instrumentId, symbol (e.g. AAPL), targetPrice (trigger level in the instrument's quote currency), currentPrice (market bid when the alert was created or last updated), and ISO 8601 UTC createdAt/updatedAt timestamps. Quota: 60 requests per 60 seconds (shared default pool).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of alerts to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

Beyond the readOnlyHint annotation, the description discloses return fields, default/max limit behavior, and a specific rate limit (60 req/60s). This adds useful behavioral context.

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

Conciseness5/5

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

The description is concise, well-structured, and front-loaded with the main purpose. Every sentence adds value with no fluff.

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

Completeness5/5

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

Given the simplicity of the tool (single parameter, list operation), the description fully covers purpose, return fields, and constraints. The presence of an output schema is assumed but the description compensates with detailed field info.

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

Parameters3/5

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

The schema already describes the 'limit' parameter fully (100% coverage). The description reiterates the same meaning without additional semantics, so baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states it lists active price alerts on the account, with a specific verb (list) and resource (price alerts). It distinguishes itself from sibling list/get tools by focusing exclusively on this resource.

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

Usage Guidelines3/5

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

The description mentions a quota but does not provide guidance on when to use this tool versus alternatives (e.g., other list tools) or when not to use it. Usage is implied but not explicit.

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

list_stock_industriesA
Read-only

List stock industries (id and name) for resolving stocksIndustryId values.

Returns {"results": [{"industryId": int, "name": str}]}.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of industries to return.
industry_idsNoOptional industry ids to look up; omit for all industries.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds rate limit information ('shares the market-data pool of 120 requests per 60 seconds') and the return format, which goes beyond the readOnlyHint annotation. No contradictions.

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

Conciseness5/5

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

The description is two concise sentences plus a rate limit note, front-loaded with purpose. Every sentence adds value without extraneous text.

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

Completeness5/5

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

Given the simple tool with two optional parameters, readOnly annotation, and output schema, the description covers purpose, return format, and rate limit, providing sufficient context for correct use.

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

Parameters4/5

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

The input schema has 100% coverage, so baseline is 3. The description adds the return format and rate limit context, which are helpful for the agent to understand data structure and constraints.

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

Purpose5/5

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

The description clearly states 'List stock industries (id and name) for resolving stocksIndustryId values.' It uses specific verb and resource, and uniquely identifies its purpose among sibling list tools.

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

Usage Guidelines4/5

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

The description implies usage for resolving industry IDs but does not explicitly state when not to use or provide alternatives. However, given its simple look-up nature, the context is clear enough.

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

list_trading_historyA
Read-only

List closed trades since a given date.

Returns trades closed on or after min_date for the configured environment (demo or real account). Each trade includes position and order ids, instrument id, direction (isBuy), leverage, units, invested amount and fees in the account currency, open/close rates in the instrument's quote currency, and ISO 8601 open/close timestamps. Paginate with page and limit. Quota: 60 requests per 60 seconds (shared default pool).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination; omit for the first page.
limitNoMaximum number of trades per page.
min_dateYesStart of the reporting period, date in YYYY-MM-DD format.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

The description adds value beyond the readOnlyHint annotation by detailing the returned fields, pagination behavior, and quota limits, fully disclosing the tool's behavioral traits.

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

Conciseness5/5

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

The description is three efficient sentences with the purpose front-loaded, no redundancy, and all information earns its place.

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

Completeness5/5

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

Given the presence of an output schema, the description adequately covers environment, pagination, quota, and key response fields, leaving no critical gaps for a list tool.

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

Parameters4/5

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

The schema has 100% coverage, and the description reinforces parameter meaning (e.g., min_date as start of period, pagination with page/limit), adding context like 'closed on or after' that improves understanding.

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

Purpose5/5

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

The description clearly states 'List closed trades since a given date' and specifies the scope (closed trades for configured environment), distinguishing it from sibling tools like get_order or list_cash_transactions.

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

Usage Guidelines4/5

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

The description indicates when to use the tool (list closed trades since a date) and provides pagination details, but does not explicitly contrast with alternatives or state when not to use it.

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

list_watchlistsA
Read-only

List the authenticated user's watchlists with their items.

Each watchlist carries watchlistId, name, watchlistType (one of Static, Dynamic, RecentlyInvested, Default), totalItems, isDefault, isUserSelectedDefault, watchlistRank (display order), and up to items_per_watchlist items with itemId (instrument or person ID), itemType ('Instrument' or 'Person'), itemRank, and itemAddedDate (ISO 8601). Shares the watchlist read quota of 60 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of watchlists to return.
include_builtinNoInclude eToro's built-in watchlists alongside user-created ones.
items_per_watchlistNoItems to include per watchlist.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description adds quota information ('Shares the watchlist read quota of 60 requests per 60 seconds') and details on response structure, providing useful behavioral context beyond annotations.

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

Conciseness3/5

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

The description is fairly detailed and lists all response fields, which is informative but slightly verbose. It front-loads the purpose but could be shorter by relying on the output schema.

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

Completeness4/5

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

Given the output schema provides return type structure, the description adds quota info, clarifies the resource, and explains the response fields. It is sufficiently complete for a read-only list tool with well-defined parameters.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents the parameters. The description mentions 'items_per_watchlist' in the response context but does not add new meaning beyond the schema.

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

Purpose5/5

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

The description clearly states 'List the authenticated user's watchlists with their items', specifying the verb, resource, and scope. It distinguishes from siblings like 'get_watchlist' (single) and 'get_public_watchlists' (public).

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

Usage Guidelines3/5

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

The description does not explicitly state when to use this tool versus alternatives. It implies usage for listing all user watchlists but lacks when-not or direct sibling differentiation.

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

search_instrumentsA
Read-only

Search instruments by ticker symbol and return candidate matches.

Matching is contains/prefix, NOT exact: searching 'AAPL' also returns variants such as 'AAPL.24-7' and 'AAPL.EUR'. Always verify that the candidate's internalSymbolFull exactly equals the symbol you want before using its instrumentId. Instrument ids are immutable (they survive rebrands and ticker changes), so they are safe to cache.

Returns {"totalItems": int, "results": [{"instrumentId": int, "internalSymbolFull": str, "displayName": str, "isCurrentlyTradable": bool}]}.

Rate limit: shares the market-data pool of 120 requests per 60 seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of candidates to return.
queryYesTicker symbol to search for, e.g. 'AAPL' or 'BTC'.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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

Discloses contains/prefix matching, immutability of instrument IDs, and rate limit sharing beyond readOnlyHint annotation. Comprehensive behavioral context.

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

Conciseness5/5

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

Well-structured: purpose first, then matching behavior, return format, and rate limit. Every sentence adds value, no fluff.

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

Completeness5/5

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

Covers purpose, parameter behavior, return format, rate limits, and caching guidance. Output schema is described explicitly. Complete for a search tool.

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

Parameters4/5

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

Schema covers parameters (100% coverage), but description adds crucial detail on how query matching works, adding value beyond schema.

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

Purpose5/5

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

Description clearly states searches instruments by ticker symbol and returns candidate matches. Specifies matching behavior (contains/prefix) which distinguishes from exact lookup tools like get_instrument_details.

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

Usage Guidelines4/5

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

Provides explicit guidance to verify internalSymbolFull before using instrumentId. Does not explicitly contrast with siblings but gives clear context for correct use.

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

Tool Schema Changelog

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

  1. 29 tool updatesv0.1.0
    • First observedcheck_trading_eligibility
    • First observedget_aggregated_balances
    • First observedget_balance
    • First observedget_balance_history
    • First observedget_balances_by_type
    • First observedget_candles
    • First observedget_close_order_info
    • First observedget_closing_prices
    • First observedget_curated_lists
    • First observedget_default_watchlist
    • First observedget_instrument_details
    • First observedget_market_recommendations
    • First observedget_order
    • First observedget_pnl
    • First observedget_portfolio
    • First observedget_portfolio_breakdown
    • First observedget_profile
    • First observedget_public_watchlists
    • First observedget_rates
    • First observedget_trading_cost_estimate
    • First observedget_watchlist
    • First observedlist_cash_transactions
    • First observedlist_exchanges
    • First observedlist_instrument_types
    • First observedlist_price_alerts
    • First observedlist_stock_industries
    • First observedlist_trading_history
    • First observedlist_watchlists
    • First observedsearch_instruments

TDQS

A4/5.0

Scored across 29 tools

Disambiguation5/5

Each tool targets a distinct resource or action, with clear descriptions. Even similar tools like get_balance, get_aggregated_balances, and get_balances_by_type are well-differentiated by scope. No overlapping purposes.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., get_balance, list_watchlists, search_instruments), using lowercase with underscores. No mixing of conventions.

Tool Count3/5

29 tools is on the high side for a single server, exceeding the 'heavy' threshold of 16-25. While each tool serves a specific endpoint, the count may overwhelm an agent. However, the domain is complex enough to justify most tools.

Completeness2/5

Several critical operations are missing, such as create_order, cancel_order, create/delete/update watchlists, and manage price alerts. The server provides many read operations but lacks corresponding write/delete actions, leading to dead ends for common trading workflows.

Maintenance

ActivityStale
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    MCP server for the Trading 212 API. Provides 28 tools for portfolio management, trading, pies, dividends, market data, and analytics.
    28
    115 PyPI
    8
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    A security-hardened MCP server that wraps the eToro public API, enabling AI assistants to trade, access market data, manage portfolios, and interact with social feeds via 34 tools.
    6
    -
  • F
    license
    A
    quality
    D
    maintenance
    MCP server for the tastytrade brokerage API, providing tools for account management, market data, and order execution.
    18
    -