Gainium
Officialgainium-mcp
An MCP (Model Context Protocol) server for Gainium — the crypto trading bot platform. Lets AI assistants manage your bots, deals, balances, and more through a standard MCP interface.
Detailed setup and connection documentation is available in docs/using-gainium-mcp.md.
Quick Start
1. Get your API keys
Go to Gainium API Settings and create an API key pair.
2. Add to your MCP client
Add this to your MCP configuration (VS Code, Claude Desktop, etc.):
{
"gainium-mcp": {
"command": "npx",
"args": ["-y", "gainium-mcp"],
"env": {
"GAINIUM_API_KEY": "<your-api-key>",
"GAINIUM_API_SECRET": "<your-api-secret>"
}
}
}That's it. The server starts automatically when your AI assistant needs it.
This local stdio mode uses GAINIUM_API_KEY and GAINIUM_API_SECRET from the server process environment.
Environment Variables
Variable | Required | Default | Description |
| Yes | — | Your Gainium API public key |
| Yes | — | Your Gainium API secret |
| No |
| API base URL |
| No |
| Transport mode: |
| No |
| Bind host for HTTP mode |
| No |
| Bind port for HTTP mode |
| No |
| Streamable HTTP endpoint path |
| No |
| Deprecated SSE GET endpoint path |
| No |
| Deprecated SSE POST endpoint path |
| No | — | Authorization-server base URL. Setting this (with |
| No |
| Token introspection endpoint |
| No | — | Shared secret presented to the introspection endpoint (must match the auth server) |
| No | derived from request | Public base URL used in the protected-resource metadata |
| No | — | When set, served as plain text at |
Related MCP server: freqtrade-mcp
Authentication Modes
gainium-mcp supports three deployment models:
Local stdio mode: the MCP server reads
GAINIUM_API_KEYandGAINIUM_API_SECRETfrom env vars.OAuth 2.1 hosted mode (recommended for hosted/public): the server acts as an OAuth protected resource. Clients (e.g. the Claude connector) obtain an access token from the Gainium authorization server and send it as
Authorization: Bearer <token>. See OAuth 2.1 hosted mode below.Header hosted mode (legacy/self-hosted): each request sends
X-API-KeyandX-API-Secretheaders so one shared server can serve many users.
In header/stdio mode, request headers take priority, falling back to GAINIUM_API_KEY / GAINIUM_API_SECRET. When OAuth mode is enabled, the Bearer token is required and the X-API-Key/X-API-Secret headers are ignored.
OAuth 2.1 hosted mode
This is the mode used for the public https://mcp.gainium.io/mcp endpoint and the Anthropic Claude connector directory (which requires OAuth and forbids API-key headers).
Enable it by setting, in HTTP mode:
export GAINIUM_MCP_TRANSPORT=http
export GAINIUM_OAUTH_ISSUER=https://app.gainium.io # Gainium authorization server
export MCP_INTROSPECTION_SECRET=<shared-secret> # must match the auth server
export GAINIUM_MCP_PUBLIC_URL=https://mcp.gainium.io # this server's public URL
# optional, defaults to <issuer>/oauth/introspect:
# export GAINIUM_INTROSPECTION_URL=https://app.gainium.io/oauth/introspect
node dist/server.jsWhen enabled, the server:
Serves OAuth Protected Resource Metadata (RFC 9728) at
/.well-known/oauth-protected-resourceand/.well-known/oauth-protected-resource/mcp, advertising the authorization server.Rejects unauthenticated MCP requests with
401 Unauthorizedand aWWW-Authenticate: Bearer resource_metadata="…"header, so clients can discover the auth server and run the OAuth flow (Dynamic Client Registration + PKCE).Validates the Bearer access token on each request via the auth server's token introspection endpoint, resolving it to the user's Gainium
(apiKey, apiSecret)and per-key restrictions (read/write, paper-only, single-bot), which are still enforced server-side. Introspection results are cached briefly.
The local stdio path is unaffected by these variables.
HTTP and SSE Mode
By default, gainium-mcp runs over stdio for MCP clients that spawn local processes. To run it as an HTTP server instead:
export GAINIUM_MCP_TRANSPORT=http
export GAINIUM_MCP_HOST=127.0.0.1
export GAINIUM_MCP_PORT=3000
node dist/server.jsWhen HTTP mode is enabled, the server exposes both transport styles:
GET|POST|DELETE /mcpfor the current Streamable HTTP transportGET /sseplusPOST /messages?sessionId=...for deprecated HTTP+SSE clients
This makes one server process compatible with both modern MCP HTTP clients and older SSE-based integrations. In hosted mode, authenticate with OAuth (see OAuth 2.1 hosted mode) or, for self-hosted/legacy setups, send X-API-Key and X-API-Secret on each request.
Available Tools (17)
As of v3.0.0 the toolset is consolidated: a single tool per operation, with a
botType / dealType / action discriminator instead of one tool per variant.
Every tool carries an MCP safety annotation — read-only tools set readOnlyHint,
write tools set destructiveHint.
Bots
Tool | Access | Description |
| read | List bots by type ( |
| read | Get a single bot by id and type |
| write | Create a bot ( |
| write | Update bot settings |
| write | Clone a bot with optional overrides |
| write | Lifecycle action: |
Deals
Tool | Access | Description |
| read | List deals by type ( |
| read | Get a single deal by id and type |
| write | Create a deal |
| write | Update an active deal |
| write | Deal action: |
Backtest
Tool | Access | Description |
| write | Run a backtest: |
| read | List backtest requests or get one by ID |
Discovery, Account & Market
Tool | Access | Description |
| read | Schema discovery for bot types and indicators |
| read | Balances, connected exchanges, supported exchanges, and global variables |
| read | Cryptocurrency screener with market metrics |
| write | Global variable action: |
Field Selection
All GET endpoints support the fields parameter for efficient payloads:
Presets:
minimal,standard(default),extended,fullCustom: comma-separated dot-notation fields (e.g.
_id,uuid,settings.name,profit.total)
Using minimal reduces payload size by ~85%.
API Permissions
Read-only key: read tools only (
list_*,get_*,discover,backtest_info,get_screener,list_presets)Write key: all tools, including
create_*,update_*,clone_bot,manage_bot,manage_deal,manage_global_variable,apply_preset, andrun_backtestRead-only directory connector (
/mcpwithGAINIUM_READONLY=true, served atmcp.gainium.io/read): exposes and allows only the 9readOnlyHinttools —run_backtestand all write tools are excludedToken audience binding (OAuth mode): when
GAINIUM_MCP_PUBLIC_URLis set, the server treats<public-url><http-path>as its RFC 8707 resource. An access token whose introspectedaudis a different resource is rejected — a token minted formcp.gainium.io/readcan't be replayed againstmcp.gainium.io/mcp, and vice versa. Tokens with noaud(legacy grants) are still accepted.
Development
# Clone and install
git clone https://github.com/gainium/gainium-mcp.git
cd gainium-mcp
npm install
# Build
npm run build
# Run locally (for testing)
export GAINIUM_API_KEY=your_key
export GAINIUM_API_SECRET=your_secret
node dist/server.js
# Run in HTTP/SSE mode
export GAINIUM_MCP_TRANSPORT=http
export GAINIUM_MCP_PORT=3000
node dist/server.jsArchitecture
gainium-mcp/
├── src/
│ ├── server.ts # MCP server + tool definitions (stdio + HTTP/SSE transports)
│ └── gainium-client.ts # HMAC-authenticated HTTP client for Gainium API v2
├── dist/ # Compiled output (published to npm)
├── package.json
├── tsconfig.json
└── README.mdLicense
MIT
Available Tools
19 toolsapply_presetADestructiveInspect
Create a bot from a curated preset in one call: fetches the preset for the given coin/exchange/tier/strategy, then creates a bot from its settings. Override pair, name, or sizing as needed.
| Name | Required | Description | Default |
|---|---|---|---|
| botType | Yes | Bot type | |
| coin | Yes | Base asset, e.g. "BTC" | |
| exchange | Yes | Preset exchange, e.g. "binance" | |
| tier | Yes | Risk tier: short (tight), mid (balanced), long (wide) | |
| strategy | No | Direction (default "long") | |
| exchangeUUID | Yes | UUID of YOUR connected exchange to create the bot on (from get_account info:"exchanges") | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| pair | No | Override the preset pair(s), underscore format e.g. ["BTC_USDT"] (optional) | |
| name | No | Override the bot name (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive hint. Description adds process detail but no additional behavioral traits beyond annotations. Consistent with destructive nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, no fluff. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Describes process and overrides but lacks output details. With 9 params and no output schema, description could mention return value. Adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 100% coverage, so baseline 3. Description mentions override pair and name but incorrectly includes 'sizing' which is not a parameter, causing slight confusion. No net gain over schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool creates a bot from a curated preset in one call, distinguishing it from manual creation (create_bot) or listing presets (list_presets). It specifies the process and overrides.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies use for presets but lacks explicit guidance on when to use vs alternatives like create_bot. No when-not-to or exclusions provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
backtest_infoARead-onlyInspect
Get backtest information: list requests, fetch a specific request, get operation schema, or build a payload template.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Information target. requests: list all. request: fetch one. schema: operation schema. template: payload template. | |
| botType | Yes | Bot type | |
| fields | No | Field selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard" | |
| page | No | Page number for pagination (1-based). Default: 1 | |
| id | No | Request ID (required for target="request") | |
| exchange | No | Exchange code for template (optional, default: binance) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds context about the specific read operations (list, fetch, get, build) but does not discuss additional behavioral traits like rate limits or prerequisites.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single sentence with a colon-separated list, front-loading the core purpose. It is concise but could be slightly more streamlined.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema (so return values are covered) and 100% schema coverage, the description adequately covers the four operations. It does not explicitly note required parameters but the schema does.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description only briefly rephrases the target options, adding minimal extra meaning beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Get backtest information' and lists four specific actions (list requests, fetch, get schema, build template), distinguishing it from sibling tools like run_backtest or create_bot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description lacks explicit guidance on when to use this tool vs alternatives like run_backtest. Usage is implied by the listed actions, but no when-not or alternative guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clone_botADestructiveInspect
Clone an existing bot and optionally override settings. Returns the new bot ID.
| Name | Required | Description | Default |
|---|---|---|---|
| botType | Yes | Bot type | |
| botId | Yes | Bot identifier. Accepts EITHER the bot's 24-character hex MongoDB ObjectId (e.g. "65f000000000000000000001") OR the bot's UUID (e.g. "550e8400-e29b-41d4-a716-446655440000"). Either form resolves to the same bot — use whichever the bot record exposes. Get both from list_bots (the `_id` and `uuid` fields). | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| overrides | No | Optional settings to override in the cloned bot. Pass an object with fields to change. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true. The description adds that it returns the new bot ID, but does not elaborate on side effects or restrictions. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences: first states action and optional override, second states return value. No fluff, well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity and schema coverage, the description provides sufficient context for a clone operation, specifying the return value. It lacks detail on what exactly is cloned (e.g., configuration, deals), but overall adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers all 4 parameters with descriptions. The description adds minimal value ('optionally override settings'), which is already implied by the overrides parameter name. High schema coverage warrants baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'clone', the resource 'existing bot', and the optional override. It distinguishes from siblings like create_bot (creates from scratch) and update_bot (modifies existing). The return value is specified.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies cloning for creating a copy with possible overrides, but lacks explicit guidance on when to use vs create_bot or update_bot, and no prerequisites 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.
create_botADestructiveInspect
Create a new bot in a single step — no follow-up update needed. The top-level properties cover the most common fields. For any field from discover(target: "bot") that is NOT listed here (e.g. startOrderType, useMoveTP, moveTPTrigger, moveTPValue, stopLossTimeout, takeProfitTimeout, dcaOrdersMultiplier, dcaStepMultiplier, trailingTP, trailingTPPerc, indicators, timers, and any other discovery field), pass them inside the 'settings' object — it is transparently merged into the request body at creation time. This avoids a create→update two-step. Use discover(target: 'bot', botType) to discover all available fields and defaults. The 'futures' and 'coinm' fields are auto-detected from the exchange — do not provide them. Requires write API key permission.
| Name | Required | Description | Default |
|---|---|---|---|
| botType | Yes | Bot type | |
| exchangeUUID | Yes | UUID of the exchange connection to use | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| pair | Yes | Trading pairs as array of {base}_{quote} strings, e.g. ["BTC_USDT"]. For Grid bots pass a single-element array — the server unwraps it automatically. | |
| name | No | Bot name | |
| strategy | No | Trading direction. Default: LONG | |
| baseOrderSize | No | Size of the initial base order, e.g. "100" | |
| orderSize | No | Size of each DCA/grid order, e.g. "100" | |
| orderSizeType | No | Order size reference currency. Default: quote | |
| tpPerc | No | Take profit percentage, e.g. "1.5" | |
| slPerc | No | Stop loss percentage, e.g. "-10" | |
| step | No | Price deviation % for next DCA/grid order, e.g. "1.5" | |
| ordersCount | No | Maximum number of orders (DCA/Combo) | |
| gridLevel | No | Grid level count (Combo only) | |
| maxNumberOfOpenDeals | No | Maximum concurrent open deals, e.g. "1" | |
| topPrice | No | Top price for grid range (Grid only) | |
| lowPrice | No | Low price for grid range (Grid only) | |
| budget | No | Total budget for grid (Grid only) | |
| levels | No | Number of grid levels (Grid only) | |
| gridType | No | Grid distribution type (Grid only) | |
| startCondition | No | Condition to start a new deal. Default: ASAP | |
| useDca | No | Enable DCA orders. Set false for a single base-order bot. | |
| useSl | No | Enable stop-loss. When true, slPerc is used. | |
| moveSL | No | Enable trailing stop-loss (move SL as price moves in your favour). | |
| moveSLTrigger | No | Profit % at which trailing SL is activated, e.g. "1.0" | |
| moveSLValue | No | Trail distance % for the moving SL, e.g. "0.5" | |
| startOrderType | No | Order type for the base (start) order. Default: market | |
| settings | No | Transparent passthrough for any bot settings field from discover(target: "bot") that is not listed as a top-level property above. All keys are merged flat into the request body — use this to create a fully-configured bot in a single call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true, so the description's mention of creation implies mutation. The description adds value by explaining the single-step behavior and transparent merging of settings, which goes beyond the annotations. No contradiction detected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with key points front-loaded (single step creation, settings fallback). It is efficient and every sentence provides useful information. However, it could be more structured with bullet points for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (28 parameters, nested objects, no output schema), the description covers the creation process well. However, it does not describe the return value or confirmation of success, which is a gap. The lack of output schema increases the burden on the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds meaning for the 'settings' parameter, explaining it is a transparent passthrough for any field not listed. It also provides additional context for 'pair' (Grid bot unwrapping) and enumerates examples of fields that go into settings. This elevates the score above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a new bot in a single step, avoiding the need for a follow-up update. This directly specifies the verb and resource, and the phrase 'no follow-up update needed' distinguishes it from sibling tools like update_bot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on using the 'settings' object for fields not listed, and references discover() for all available fields. It also warns about auto-detected fields ('futures', 'coinm') and clarifies pair handling for Grid bots. However, it does not explicitly state when not to use this tool or provide alternative tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_dealADestructiveInspect
Create a new deal. For dca/combo: starts a deal from an existing bot. For terminal: creates a standalone terminal deal.
| Name | Required | Description | Default |
|---|---|---|---|
| dealType | Yes | Deal type | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| botId | No | Bot ID (required for dca/combo) | |
| symbol | No | Optional symbol override (dca/combo) | |
| exchangeUUID | No | Exchange UUID (required for terminal) | |
| terminalDealType | No | Terminal deal type (required for terminal) | |
| pair | No | Trading pair for terminal (optional) | |
| strategy | No | Trading strategy for terminal | |
| baseOrderSize | No | Base order size for terminal | |
| orderSize | No | Order size for terminal | |
| tpPerc | No | Take profit percentage for terminal | |
| slPerc | No | Stop loss percentage for terminal | |
| settings | No | Transparent passthrough for any additional terminal deal settings. Merged flat into request body. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and destructiveHint=true, indicating a write operation that may be destructive. The description confirms creation of a new deal, aligning with annotations and adding no contradiction. It also clarifies the two distinct creation pathways, adding 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The first sentence states the main purpose; the second explains the two modes. Every phrase earns its place, making it highly efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of 13 parameters and two distinct creation paths, the description provides a high-level overview that covers the main modes. It does not detail all parameter interactions or return values, but the schema fills those gaps. A mention of any output or next steps could improve completeness, but overall it's adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema coverage is 100% with descriptions, the tool description adds significant meaning by grouping parameters by deal type (dca/combo requires botId, terminal requires exchangeUUID, etc.). This provides context that the schema alone does not offer, such as explaining that settings is a passthrough for terminal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool's purpose: creating a new deal. It distinguishes between two types (dca/combo from existing bot, terminal standalone), providing a clear verb+resource distinction that differentiates it from sibling tools like update_deal or manage_deal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use each parameter set: for dca/combo vs terminal. It implicitly guides the agent on required parameters based on deal type, but does not explicitly exclude other use cases or mention alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discoverARead-onlyInspect
Discover bots, bot details, bot sections, indicators, or supported exchanges. Use this to learn available fields, defaults, and strategies.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Discovery target. bots: list all. bot: details for one. botSections: list sections. indicators: list all. indicator: details for one. supportedExchanges: list all. | |
| botType | No | Bot type (required for bot/botSections) | |
| section | No | Section name for bot discovery (optional) | |
| type | No | Indicator type (required for target="indicator") | |
| action | No | Action filter for indicators (optional: "add", "close", "update") | |
| exchange | No | Exchange code for indicators (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | Discovery metadata for the requested target: bot schemas, bot sections, indicator schemas (object), or lists of bots/indicators/exchanges (array). |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true and destructiveHint=false. The description adds context about learning defaults/strategies, reinforcing read-only nature. No contradictions; behavioral traits are adequately disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the primary action and list of targets. No redundant information, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety, the description is complete for a discovery tool. It covers multiple targets adequately, though could mention return format briefly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with well-described parameters, so the description adds no extra per-parameter meaning. Baseline 3 is appropriate as the schema already handles semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool discovers bots, bot details, sections, indicators, and exchanges. It distinguishes from sibling tools (most are CRUD operations) by focusing on exploration and learning available fields, defaults, and strategies.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Use this to learn available fields, defaults, and strategies,' which gives clear usage context for discovery. It lacks explicit when-not-to-use or alternatives, but the purpose is well differentiated from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_accountBRead-onlyInspect
Get account information: balances, connected exchanges, global variables, or supported exchanges.
| Name | Required | Description | Default |
|---|---|---|---|
| info | Yes | Information type. balances: account balances. exchanges: connected exchanges. globalVariables: user variables. supportedExchanges: API supports. | |
| fields | No | Field selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard" | |
| page | No | Page number for pagination (1-based). Default: 1 | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| exchangeId | No | Filter by exchange ID (balances only) | |
| asset | No | Filter by single asset (balances only) | |
| assets | No | Filter by multiple assets (balances only). Use asset OR assets, not both. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | Account information for the requested type: balances, connected exchanges, global variables, or supported exchanges (array or object depending on `info`). |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false, so the description does not need to reiterate those. The description adds context by listing the info types, but it does not disclose additional behavioral aspects such as rate limits, authentication requirements, or the effect of empty results. With annotations present, the description is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words. It front-loads the action and resource, and lists the key subcategories efficiently. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description provides a good high-level summary, it does not address conditional parameter usage (e.g., exchangeId only for balances) or pagination hints. The output schema exists, so return values are covered. For a tool with 7 parameters and conditional logic, the description could be more helpful, but the schema details compensate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter semantics beyond what the schema already provides. The schema descriptions for each parameter are detailed, so the description's lack of additional parameter info is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves account information and lists four specific subcategories (balances, exchanges, globalVariables, supportedExchanges). The verb 'get' and resource 'account information' are specific, and the tool is distinct from siblings like get_bot or get_deal, but it does not explicitly differentiate itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention when not to use it or suggest other tools for different scenarios. The usage is implied by the name and subcategories, but explicit guidelines are missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_botARead-onlyInspect
Get a single bot by its MongoDB ObjectId or UUID. Supports the same field selection presets as list_bots.
| Name | Required | Description | Default |
|---|---|---|---|
| botType | Yes | Bot type | |
| botId | Yes | Bot identifier. Accepts EITHER the bot's 24-character hex MongoDB ObjectId (e.g. "65f000000000000000000001") OR the bot's UUID (e.g. "550e8400-e29b-41d4-a716-446655440000"). Either form resolves to the same bot — use whichever the bot record exposes. Get both from list_bots (the `_id` and `uuid` fields). | |
| fields | No | Field selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard" | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | The bot record; fields present depend on the `fields` preset. |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's addition that it gets a bot aligns well. It also adds context about ID formats and field presets, which is useful 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. First sentence states purpose, second adds context. Very concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations are provided, the description covers the core functionality. It could mention error cases, but is sufficient for a simple get tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds value by explicitly mentioning that botId accepts ObjectId or UUID and referencing list_bots for field presets, which is not in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool gets a single bot by its MongoDB ObjectId or UUID, and mentions field selection presets. It is specific and distinguishes from sibling tools like list_bots.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for retrieving a single bot with field selection, and references list_bots for presets. However, it does not explicitly state when not to use or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dealARead-onlyInspect
Get a single deal by its MongoDB ObjectId. Supports the same field selection presets as list_deals.
| Name | Required | Description | Default |
|---|---|---|---|
| dealType | Yes | Deal type | |
| dealId | Yes | Deal identifier. Accepts EITHER the deal's 24-character hex MongoDB ObjectId (e.g. "65f000000000000000000001") OR the deal's UUID. Either form resolves to the same deal — use whichever the deal record exposes. Get both from list_deals (the `_id` and `uuid` fields). | |
| fields | No | Field selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard" | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | The deal record; fields present depend on the `fields` preset. |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false. The description adds the behavioral detail of supporting field selection presets, which is not evident from annotations alone. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences that convey the core purpose and a key distinguishing feature. Every sentence is necessary and no extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-deal retrieval tool with an output schema and complete parameter documentation, the description is adequate. It could optionally mention the response format or error cases, but the existing information is sufficient for an AI 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema covers 100% of parameters with detailed descriptions. The description adds contextual value by linking the fields parameter to list_deals presets, which reduces ambiguity about what values are accepted beyond the enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get a single deal'), the identifier type ('by its MongoDB ObjectId'), and a key feature ('Supports the same field selection presets as list_deals'). It is specific and distinguishes this tool from siblings like list_deals and update_deal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates when to use this tool (when you have a specific deal ID) by contrasting with list_deals. However, it does not explicitly state when not to use it or provide alternative tool names for different use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_screenerCRead-onlyInspect
Get cryptocurrency screener results. Filter by market cap, volume, and sort by various metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | Field selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard" | |
| page | No | Page number for pagination (1-based). Default: 1 | |
| category | No | Filter by category (optional) | |
| minMarketCap | No | Minimum market cap (optional) | |
| maxMarketCap | No | Maximum market cap (optional) | |
| minVolume | No | Minimum volume (optional) | |
| sort | No | Sort field (applied client-side; the API does not sort). One of: "volatility" (largest absolute 24h % change), "priceChange"/"change", "volume"/"totalVolume", "marketCap", "price". Use "volatility" to find the most volatile pairs. | |
| order | No | Sort order (optional, default desc when sorting) | |
| maxPages | No | When sorting, how many pages (10 coins each, ≤30, default 10) to fetch and rank across. Higher = wider pool for "most volatile" but more requests. |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | Screener rows (coins) with market data. When `sort` is used, ranked client-side and `meta` records the sort details. |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does not disclose behavioral traits beyond what annotations already provide. It does not mention that sorting is client-side, that pagination is 1-based, or that maxPages controls the number of API calls. With readOnlyHint=true already indicating a read-only operation, the description adds minimal value for behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise and front-loaded. However, it omits important details that could be included without much length, such as pagination or client-side sort behavior. It is not wasteful, but not optimally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of the tool (9 optional parameters, client-side sort, pagination, and aggregation via maxPages), the description is too brief. It does not mention the presets for fields, the client-side nature of sorting, or the aggregation behavior. An output schema exists but is not shown; the description should compensate by explaining the result structure. It falls short.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all parameters. The description adds a high-level summary of filtering and sorting, but does not provide additional meaning beyond what the schema offers. For example, it doesn't explain the difference between presets and comma-separated fields. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get') and resource ('cryptocurrency screener results'). It mentions filtering and sorting capabilities, making the tool's purpose understandable. However, it does not explicitly distinguish it from sibling tools, but since no other tool retrieves screener results, this is acceptable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus its siblings. The description does not mention typical use cases, prerequisites, or when to avoid using it. An agent would have to infer usage from the name and parameters alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_botsARead-onlyInspect
List bots by type (DCA, Combo, or Grid). Supports field selection presets (minimal, standard, extended, full). Supports filtering by status and paper/real trading context.
| Name | Required | Description | Default |
|---|---|---|---|
| botType | Yes | Bot type | |
| fields | No | Field selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard" | |
| page | No | Page number for pagination (1-based). Default: 1 | |
| status | No | Filter by bot status | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | Matching bot records; fields present depend on the `fields` preset. |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint=true and destructiveHint=false, so the description focuses on behavioral traits like field selection presets and filtering options. It adds useful context beyond annotations, though it omits details like pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with two sentences: the first states the core purpose with bot types, and the second lists additional features. It is front-loaded and contains no redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (5 parameters, output schema present), the description covers the main aspects: bot type filtering, field selection, status and context filters. It does not mention pagination or sorting, but these are documented in the schema, so completeness is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema coverage, the baseline is 3. The description adds meaning by explaining the role of botType, fields, and filters, grouping them into a coherent purpose. The page parameter is only implied through its schema, but overall the description compensates well.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List bots by type (DCA, Combo, or Grid)', using a specific verb and resource. It highlights key capabilities like field selection presets and filtering by status and paper/real context, distinguishing it from sibling tools like get_bot or list_deals.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its name and mention of bot types and filters, but it does not explicitly state when to use this tool over alternatives or when not to use it. No exclusions or comparisons are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dealsARead-onlyInspect
List deals by type (DCA, Combo, or Terminal). Supports field selection presets. Supports filtering by status and botId.
| Name | Required | Description | Default |
|---|---|---|---|
| dealType | Yes | Deal type | |
| fields | No | Field selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard" | |
| page | No | Page number for pagination (1-based). Default: 1 | |
| status | No | Filter by deal status | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| botId | No | Filter by bot ID (optional) |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | Matching deal records; fields present depend on the `fields` preset. |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by mentioning field selection presets and filtering, which are behavioral options beyond the annotations. No contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the core action ('List deals by type') followed by key capabilities. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and rich input schemas, the description covers the essential behavior (listing, type, filters, field selection) but omits mention of pagination. While the page parameter is in the schema, an agent might benefit from knowing pagination is supported. Overall, it is nearly complete for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds minimal extra meaning by summarizing dealType enum values and mentioning field presets, but these are already detailed in the schema. The description reinforces key parameters without significant new information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists deals by type (DCA, Combo, Terminal) and distinguishes it from siblings like get_deal (single deal) and create_deal (mutation). The verb 'list' combined with resource 'deals' and explicit type enumeration leaves no ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context by specifying filtering capabilities (status, botId) and field selection presets. It does not explicitly state when not to use or reference alternatives, but the context is clear enough for an agent to select this over siblings like get_deal for single-item retrieval or list_bots for bots.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_presetsARead-onlyInspect
List curated bot-strategy presets, ranked by backtested performance. Each coin returns tiers (short/mid/long) × strategy (long/short) with ROI, drawdown, and the full strategy settings for review and comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| botType | Yes | Bot type to list presets for | |
| coin | No | Filter to a single base asset, e.g. "BTC" (skips the closed-deals floor) | |
| exchange | No | Canonical exchange, e.g. "binance" (use with coin) | |
| strategy | No | Filter by direction (optional) | |
| limit | No | Max coins to return (default 10, max 50) | |
| summary | No | Omit the per-tier settings blob for a lightweight ranked list (default false) | |
| includeNoDeals | No | Include coins with fewer than the minimum closed deals (default false) |
Output Schema
| Name | Required | Description |
|---|---|---|
| status | No | OK on success, NOTOK on a handled API error. |
| reason | No | Error reason when status is NOTOK; null otherwise. |
| data | No | Curated preset rows (one per coin), each with tiers × strategy, ROI, drawdown, and (unless summary) the full settings blob. |
| meta | No | Pagination / result metadata, present on list-style responses. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds behavioral context by specifying that results are ranked by backtested performance and include ROI, drawdown, and full strategy settings. This goes beyond annotations, though it does not mention rate limits or auth needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences convey the purpose and output without redundancy. Information is front-loaded and each sentence adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters (100% schema coverage) and an output schema, the description sufficiently explains the tool's function and output. It could mention ordering criteria explicitly, but overall it is complete enough for an agent to use the tool effectively.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description does not add meaning to individual parameters beyond what the schema provides. It explains the output structure but not parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists curated bot-strategy presets, ranked by backtested performance, and details the output structure. This distinguishes it from siblings like list_bots (which lists bots) and apply_preset (which applies a preset).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for browsing presets, but does not explicitly state when to use this tool versus alternatives like apply_preset or list_bots. It provides no 'when not to use' guidance or explicit context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_botADestructiveInspect
Manage bot lifecycle: start, stop, archive, restore, or change trading pairs (DCA only). Each action has specific requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform on the bot | |
| botId | Yes | Bot identifier. Accepts EITHER the bot's 24-character hex MongoDB ObjectId (e.g. "65f000000000000000000001") OR the bot's UUID (e.g. "550e8400-e29b-41d4-a716-446655440000"). Either form resolves to the same bot — use whichever the bot record exposes. Get both from list_bots (the `_id` and `uuid` fields). | |
| botType | Yes | Bot type | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| closeType | No | Close type for stop action (dca/combo). "closeByMarket" closes all positions, "leave" pauses the bot. | |
| closeGridType | No | Close type for stop action (grid only) | |
| cancelPartiallyFilled | No | Whether to cancel partially filled orders when stopping (optional) | |
| pair | No | Full replacement set of trading pairs for changePairs action (DCA, multi-pair bots only). Underscore format, e.g. ["BTC_USDT","ETH_USDT"]. Replaces all existing pairs. Single-coin bots reject pair changes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructiveHint=true and readOnlyHint=false. Description adds specific destructive actions (stop, archive) and the constraint 'DCA only' for changePairs. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that is front-loaded with purpose and includes a concise caveat. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and conditional requirements, the description is minimal. Does not explain that closeType/closeGridType are needed for stop, or that pair is only for changePairs. No output schema, but return behavior is not addressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with detailed descriptions. The tool description says 'Each action has specific requirements' but does not elaborate on parameter dependencies per action. Minimal added value beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Manage', resource 'bot lifecycle', and lists specific actions (start, stop, archive, restore, changePairs). Distinguishes from siblings like create_bot, update_bot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Mentions 'Each action has specific requirements' but provides no explicit guidance on when to use this tool vs alternatives like create_bot or update_bot. No exclusions or when-not advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_dealBDestructiveInspect
Manage deal operations: close a deal, add funds, or reduce funds. Each action has specific requirements.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform on the deal | |
| dealId | Yes | Deal identifier. Accepts EITHER the deal's 24-character hex MongoDB ObjectId (e.g. "65f000000000000000000001") OR the deal's UUID. Either form resolves to the same deal — use whichever the deal record exposes. Get both from list_deals (the `_id` and `uuid` fields). | |
| dealType | Yes | Deal type | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| closeType | No | Close type for close action | |
| botId | No | Bot ID for addFunds/reduceFunds (alternative to dealId for dca/combo) | |
| qty | No | Amount to add/reduce. With type="fixed" it is an amount in the chosen asset denomination; with type="perc" it is a percentage of the position. | |
| type | No | Type: fixed amount or percentage | |
| asset | No | Denomination for a fixed add/reduce — "quote" (e.g. USDT) or "base" (the coin). Required when type="fixed"; this is NOT a ticker symbol. Ignored when type="perc". | |
| symbol | No | Symbol override (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the description's listing of mutating actions is consistent. However, it adds no extra behavioral context beyond what annotations convey, such as irreversible effects or authorization needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—one sentence plus a short phrase—and front-loads the core purpose. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 100% schema coverage, the tool has 10 parameters and three distinct actions with conditional dependencies. The description does not summarize these relationships or provide a high-level overview of when each action applies, making it insufficient for a complex tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, meaning all parameters are documented in the schema. The tool description adds no additional meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages deal operations with three specific actions: close, add funds, or reduce funds. This distinguishes it from siblings like create_deal or update_deal.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description says 'Each action has specific requirements' but provides no guidance on when to use this tool vs alternatives like manage_bot or update_deal. No explicit context or exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_global_variableADestructiveInspect
Create, update, or delete a global variable. Variables are user-defined constants accessible in strategies.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform | |
| id | No | Variable ID (required for update/delete) | |
| name | No | Variable name (required for create, optional for update) | |
| type | No | Variable type (required for create, optional for update) | |
| value | No | Variable value (required for create, optional for update) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds context that variables are 'user-defined constants accessible in strategies,' which is helpful but does not disclose further behavioral traits such as impact on strategies or undo possibilities.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no superfluous words. It front-loads the primary actions and provides a brief definition of the resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description could include more complete context, such as the consequences of deletion or the requirement to provide 'id' for update/delete. While it covers the basic purpose, it leaves some operational details implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description does not add additional meaning to the parameters beyond what is in the schema (e.g., no explanation of how 'id' relates to 'action' or constraints on 'value').
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool performs create, update, or delete operations on global variables. The verb 'manage' plus the specific resource 'global variable' is unambiguous and distinguishes it from sibling tools that focus on bots, deals, and presets.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for managing global variables but does not provide explicit guidance on when to use this tool versus alternatives, nor does it mention exclusions or prerequisites. Users must infer from the action enum.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_backtestAInspect
Run a backtest operation: validate, estimate cost, request async, or request with sync response. Pass a backtest payload with exchange, exchangeUUID, and bot settings.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Backtest mode. validate: confirm payload. estimate: check credit cost. request: async backtest. requestSync: wait for result. | |
| botType | Yes | Bot type for the backtest | |
| payload | Yes | Backtest request wrapper. Required nesting: payload.data.exchange (string), payload.data.exchangeUUID (UUID string), payload.data.settings (inner bot settings object). Optional: from, to (Unix ms timestamps), interval (default: 1h). | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| fields | No | Field selection for requestSync mode (optional) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description does not clarify what the tool actually does beyond 'run backtest'. It omits behavioral details such as whether it consumes credits, returns a backtest ID, or how long async requests take. The description adds minimal value beyond the annotations and schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that cover the tool's purpose and main modes without extraneous information. It is front-loaded with the action (run) and key distinction (four modes), making it easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (nested objects, enums, multiple modes), the description is too brief. It does not explain what the tool returns (no output schema), how to interpret results, or prerequisites like credit balance. However, it covers the basic operation flow. A more complete description would add outcome details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds a brief summary of required payload fields, but this largely repeats the schema. It does not provide additional context or constraints beyond what the schema already offers. A higher score would require unique semantic insights, which are absent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs backtest operations, lists four distinct modes (validate, estimate, request, requestSync), and specifies the required payload elements (exchange, exchangeUUID, bot settings). It distinguishes from siblings like backtest_info, which handles results, and other bot management tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use each mode (validate, estimate, request, requestSync), but does not explicitly state when not to use the tool or offer direct comparisons with alternatives like backtest_info for retrieving results. The guidance is adequate for an agent to choose the correct mode.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_botADestructiveInspect
Update an existing bot (DCA or Combo only; Grid has no update endpoint). Pass only the fields you want to change. Settings object must be non-empty. Boolean gate enforcement: feature value fields are silently ignored unless their toggle is set to true.
| Name | Required | Description | Default |
|---|---|---|---|
| botType | Yes | Bot type (Grid does not support updates) | |
| botId | Yes | Bot identifier. Accepts EITHER the bot's 24-character hex MongoDB ObjectId (e.g. "65f000000000000000000001") OR the bot's UUID (e.g. "550e8400-e29b-41d4-a716-446655440000"). Either form resolves to the same bot — use whichever the bot record exposes. Get both from list_bots (the `_id` and `uuid` fields). | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| settings | Yes | Settings object with fields to update. Only include changed fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive and not read-only; the description adds crucial behavioral details beyond annotations, such as the silent ignoring of feature value fields when their toggle is false. This transparency helps the agent avoid unexpected behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three clear, efficient sentences with no wasted words. The most important information (purpose and constraints) is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple update tool with full schema coverage and annotations, the description covers purpose, usage, constraints, and a behavioral quirk. Missing a note about the return value, which could be inferred but not stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds little to parameter understanding beyond what the schema provides. The description re-emphasizes the partial update strategy but does not introduce new parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool updates existing bots, specifying DCA or Combo only, directly distinguishing it from create_bot and other siblings. The verb-resource pairing is precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance on partial updates ('Pass only the fields you want to change'), a constraint on the settings object (must be non-empty), and a behavioral note about boolean gates. It also clarifies that Grid bots are not supported, helping the agent avoid calling the tool incorrectly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dealADestructiveInspect
Update an existing deal. Pass only the fields you want to change. Settings object must be non-empty.
| Name | Required | Description | Default |
|---|---|---|---|
| dealType | Yes | Deal type | |
| dealId | Yes | Deal identifier. Accepts EITHER the deal's 24-character hex MongoDB ObjectId (e.g. "65f000000000000000000001") OR the deal's UUID. Either form resolves to the same deal — use whichever the deal record exposes. Get both from list_deals (the `_id` and `uuid` fields). | |
| paperContext | No | Paper trading context (true = paper, false = real). Default: false | |
| settings | Yes | Settings object with fields to update. Only include changed fields. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true, so the description adds minimal beyond that. It adds a constraint (settings non-empty) but doesn't elaborate on side effects 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no wasted words. Front-loaded with the key action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 4-parameter tool with full schema descriptions and annotations, the description covers the essential usage pattern and constraint. Could mention output or error handling but not required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Description adds value beyond the schema by advising partial updates. Schema already covers parameter details well (100% coverage), so additional guidance is helpful but not essential.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Update' and the resource 'existing deal'. It distinguishes this from create_deal and manage_deal, aligning with the tool's name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides usage guidance: 'Pass only the fields you want to change' and 'Settings object must be non-empty'. However, it does not explicitly state when not to use this tool or mention alternatives like manage_deal.
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.
19 tool updates
v0.1.0- First observed
apply_preset - First observed
backtest_info - First observed
clone_bot - First observed
create_bot - First observed
create_deal - First observed
discover - First observed
get_account - First observed
get_bot - First observed
get_deal - First observed
get_screener - First observed
list_bots - First observed
list_deals - First observed
list_presets - First observed
manage_bot - First observed
manage_deal - First observed
manage_global_variable - First observed
run_backtest - First observed
update_bot - First observed
update_deal
TDQS
Scored across 19 tools
Each tool has a clearly distinct purpose, covering bots, deals, backtesting, presets, account, screener, and global variables. No two tools overlap in functionality.
Most tools follow verb_noun snake_case (e.g., create_bot, list_deals). Only 'discover' (verb only) and 'backtest_info' (noun_noun) deviate, making the set mostly consistent but not perfect.
19 tools is slightly above the typical 3-15 range, but each tool covers a necessary aspect of a trading bot platform. The count is justified by the breadth of functionality.
The tool set covers core operations for bots and deals, but lacks delete operations and management of exchanges or presets. Notable gaps exist that agents would need to work around.
Maintenance
Related MCP Connectors
Trade 16 crypto exchanges + MetaTrader 5 from your AI assistant via one MCP connection.
Crypto trading intelligence MCP — 34+ endpoints, x402 pay-per-use, AI agent strategy & execution
MCP server for OpenMM — exposes market data, account, trading, and strategy tools to AI agents
Hosted MCP for stocks, options, Greeks, brokers, order previews, alerts, and workflows.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for Binance USDT-M Futures trading — exposes tools for market data, account state, order management, and position/margin control.236Apache 2.0
- AlicenseAqualityDmaintenanceMCP server that connects AI agents to Freqtrade crypto trading bot via REST API. It provides 15 tools for account stats, trade management, market data, pair lists, and bot lifecycle control.1910 npm2MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server for cryptocurrency trading via Freqtrade, enabling trade management, balance checks, strategy configuration, backtesting, and bot lifecycle control from any MCP-compatible AI agent.MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI tools to execute trades and fetch market data across six crypto exchanges via natural language or API, with dual Telegram and MCP interfaces.2-