Skip to main content
Glama
Gainium

Gainium

Official
by Gainium

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

GAINIUM_API_KEY

Yes

Your Gainium API public key

GAINIUM_API_SECRET

Yes

Your Gainium API secret

GAINIUM_API_BASE_URL

No

https://api.gainium.io

API base URL

GAINIUM_MCP_TRANSPORT

No

stdio

Transport mode: stdio, http, streamable-http, sse, or http-sse

GAINIUM_MCP_HOST

No

127.0.0.1

Bind host for HTTP mode

GAINIUM_MCP_PORT

No

3000

Bind port for HTTP mode

GAINIUM_MCP_HTTP_PATH

No

/mcp

Streamable HTTP endpoint path

GAINIUM_MCP_SSE_PATH

No

/sse

Deprecated SSE GET endpoint path

GAINIUM_MCP_MESSAGES_PATH

No

/messages

Deprecated SSE POST endpoint path

GAINIUM_OAUTH_ISSUER

No

Authorization-server base URL. Setting this (with MCP_INTROSPECTION_SECRET, in HTTP mode) enables OAuth protected-resource mode

GAINIUM_INTROSPECTION_URL

No

<issuer>/oauth/introspect

Token introspection endpoint

MCP_INTROSPECTION_SECRET

No

Shared secret presented to the introspection endpoint (must match the auth server)

GAINIUM_MCP_PUBLIC_URL

No

derived from request

Public base URL used in the protected-resource metadata

OPENAI_APPS_CHALLENGE_TOKEN

No

When set, served as plain text at /.well-known/openai-apps-challenge for OpenAI Apps domain verification

Related MCP server: freqtrade-mcp

Authentication Modes

gainium-mcp supports three deployment models:

  • Local stdio mode: the MCP server reads GAINIUM_API_KEY and GAINIUM_API_SECRET from 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-Key and X-API-Secret headers 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.js

When enabled, the server:

  1. Serves OAuth Protected Resource Metadata (RFC 9728) at /.well-known/oauth-protected-resource and /.well-known/oauth-protected-resource/mcp, advertising the authorization server.

  2. Rejects unauthenticated MCP requests with 401 Unauthorized and a WWW-Authenticate: Bearer resource_metadata="…" header, so clients can discover the auth server and run the OAuth flow (Dynamic Client Registration + PKCE).

  3. 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.js

When HTTP mode is enabled, the server exposes both transport styles:

  • GET|POST|DELETE /mcp for the current Streamable HTTP transport

  • GET /sse plus POST /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

list_bots

read

List bots by type (dca, combo, grid) with filters and field selection

get_bot

read

Get a single bot by id and type

create_bot

write

Create a bot (dca, combo, or grid)

update_bot

write

Update bot settings

clone_bot

write

Clone a bot with optional overrides

manage_bot

write

Lifecycle action: start, stop, archive, restore, changePairs

Deals

Tool

Access

Description

list_deals

read

List deals by type (dca, combo, terminal) with filters

get_deal

read

Get a single deal by id and type

create_deal

write

Create a deal

update_deal

write

Update an active deal

manage_deal

write

Deal action: close, addFunds, reduceFunds

Backtest

Tool

Access

Description

run_backtest

write

Run a backtest: validate, estimate, async, or sync (request/requestSync submit a job — not read-only)

backtest_info

read

List backtest requests or get one by ID

Discovery, Account & Market

Tool

Access

Description

discover

read

Schema discovery for bot types and indicators

get_account

read

Balances, connected exchanges, supported exchanges, and global variables

get_screener

read

Cryptocurrency screener with market metrics

manage_global_variable

write

Global variable action: create, update, delete

Field Selection

All GET endpoints support the fields parameter for efficient payloads:

  • Presets: minimal, standard (default), extended, full

  • Custom: 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, and run_backtest

  • Read-only directory connector (/mcp with GAINIUM_READONLY=true, served at mcp.gainium.io/read): exposes and allows only the 9 readOnlyHint tools — run_backtest and all write tools are excluded

  • Token audience binding (OAuth mode): when GAINIUM_MCP_PUBLIC_URL is set, the server treats <public-url><http-path> as its RFC 8707 resource. An access token whose introspected aud is a different resource is rejected — a token minted for mcp.gainium.io/read can't be replayed against mcp.gainium.io/mcp, and vice versa. Tokens with no aud (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.js

Architecture

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

License

MIT

Available Tools

19 tools
apply_presetA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
botTypeYesBot type
coinYesBase asset, e.g. "BTC"
exchangeYesPreset exchange, e.g. "binance"
tierYesRisk tier: short (tight), mid (balanced), long (wide)
strategyNoDirection (default "long")
exchangeUUIDYesUUID of YOUR connected exchange to create the bot on (from get_account info:"exchanges")
paperContextNoPaper trading context (true = paper, false = real). Default: false
pairNoOverride the preset pair(s), underscore format e.g. ["BTC_USDT"] (optional)
nameNoOverride the bot name (optional)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_infoA
Read-only
Inspect

Get backtest information: list requests, fetch a specific request, get operation schema, or build a payload template.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesInformation target. requests: list all. request: fetch one. schema: operation schema. template: payload template.
botTypeYesBot type
fieldsNoField selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard"
pageNoPage number for pagination (1-based). Default: 1
idNoRequest ID (required for target="request")
exchangeNoExchange code for template (optional, default: binance)

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all parameters thoroughly. The description 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.

Purpose5/5

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.

Usage Guidelines3/5

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_botA
Destructive
Inspect

Clone an existing bot and optionally override settings. Returns the new bot ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
botTypeYesBot type
botIdYesBot 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).
paperContextNoPaper trading context (true = paper, false = real). Default: false
overridesNoOptional settings to override in the cloned bot. Pass an object with fields to change.

TDQS

A3.8/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_botA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
botTypeYesBot type
exchangeUUIDYesUUID of the exchange connection to use
paperContextNoPaper trading context (true = paper, false = real). Default: false
pairYesTrading pairs as array of {base}_{quote} strings, e.g. ["BTC_USDT"]. For Grid bots pass a single-element array — the server unwraps it automatically.
nameNoBot name
strategyNoTrading direction. Default: LONG
baseOrderSizeNoSize of the initial base order, e.g. "100"
orderSizeNoSize of each DCA/grid order, e.g. "100"
orderSizeTypeNoOrder size reference currency. Default: quote
tpPercNoTake profit percentage, e.g. "1.5"
slPercNoStop loss percentage, e.g. "-10"
stepNoPrice deviation % for next DCA/grid order, e.g. "1.5"
ordersCountNoMaximum number of orders (DCA/Combo)
gridLevelNoGrid level count (Combo only)
maxNumberOfOpenDealsNoMaximum concurrent open deals, e.g. "1"
topPriceNoTop price for grid range (Grid only)
lowPriceNoLow price for grid range (Grid only)
budgetNoTotal budget for grid (Grid only)
levelsNoNumber of grid levels (Grid only)
gridTypeNoGrid distribution type (Grid only)
startConditionNoCondition to start a new deal. Default: ASAP
useDcaNoEnable DCA orders. Set false for a single base-order bot.
useSlNoEnable stop-loss. When true, slPerc is used.
moveSLNoEnable trailing stop-loss (move SL as price moves in your favour).
moveSLTriggerNoProfit % at which trailing SL is activated, e.g. "1.0"
moveSLValueNoTrail distance % for the moving SL, e.g. "0.5"
startOrderTypeNoOrder type for the base (start) order. Default: market
settingsNoTransparent 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

A4.2/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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

Given the tool's complexity (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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_dealA
Destructive
Inspect

Create a new deal. For dca/combo: starts a deal from an existing bot. For terminal: creates a standalone terminal deal.

ParametersJSON Schema
NameRequiredDescriptionDefault
dealTypeYesDeal type
paperContextNoPaper trading context (true = paper, false = real). Default: false
botIdNoBot ID (required for dca/combo)
symbolNoOptional symbol override (dca/combo)
exchangeUUIDNoExchange UUID (required for terminal)
terminalDealTypeNoTerminal deal type (required for terminal)
pairNoTrading pair for terminal (optional)
strategyNoTrading strategy for terminal
baseOrderSizeNoBase order size for terminal
orderSizeNoOrder size for terminal
tpPercNoTake profit percentage for terminal
slPercNoStop loss percentage for terminal
settingsNoTransparent passthrough for any additional terminal deal settings. Merged flat into request body.

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

discoverA
Read-only
Inspect

Discover bots, bot details, bot sections, indicators, or supported exchanges. Use this to learn available fields, defaults, and strategies.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesDiscovery target. bots: list all. bot: details for one. botSections: list sections. indicators: list all. indicator: details for one. supportedExchanges: list all.
botTypeNoBot type (required for bot/botSections)
sectionNoSection name for bot discovery (optional)
typeNoIndicator type (required for target="indicator")
actionNoAction filter for indicators (optional: "add", "close", "update")
exchangeNoExchange code for indicators (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoDiscovery metadata for the requested target: bot schemas, bot sections, indicator schemas (object), or lists of bots/indicators/exchanges (array).
metaNoPagination / result metadata, present on list-style responses.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

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

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_accountB
Read-only
Inspect

Get account information: balances, connected exchanges, global variables, or supported exchanges.

ParametersJSON Schema
NameRequiredDescriptionDefault
infoYesInformation type. balances: account balances. exchanges: connected exchanges. globalVariables: user variables. supportedExchanges: API supports.
fieldsNoField selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard"
pageNoPage number for pagination (1-based). Default: 1
paperContextNoPaper trading context (true = paper, false = real). Default: false
exchangeIdNoFilter by exchange ID (balances only)
assetNoFilter by single asset (balances only)
assetsNoFilter by multiple assets (balances only). Use asset OR assets, not both.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoAccount information for the requested type: balances, connected exchanges, global variables, or supported exchanges (array or object depending on `info`).
metaNoPagination / result metadata, present on list-style responses.

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

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

Purpose4/5

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.

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention 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_botA
Read-only
Inspect

Get a single bot by its MongoDB ObjectId or UUID. Supports the same field selection presets as list_bots.

ParametersJSON Schema
NameRequiredDescriptionDefault
botTypeYesBot type
botIdYesBot 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).
fieldsNoField selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard"
paperContextNoPaper trading context (true = paper, false = real). Default: false

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoThe bot record; fields present depend on the `fields` preset.
metaNoPagination / result metadata, present on list-style responses.

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

Conciseness5/5

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.

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

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

The description implies usage for retrieving 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_dealA
Read-only
Inspect

Get a single deal by its MongoDB ObjectId. Supports the same field selection presets as list_deals.

ParametersJSON Schema
NameRequiredDescriptionDefault
dealTypeYesDeal type
dealIdYesDeal 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).
fieldsNoField selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard"
paperContextNoPaper trading context (true = paper, false = real). Default: false

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoThe deal record; fields present depend on the `fields` preset.
metaNoPagination / result metadata, present on list-style responses.

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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

The description clearly states the action ('Get a 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.

Usage Guidelines4/5

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_screenerC
Read-only
Inspect

Get cryptocurrency screener results. Filter by market cap, volume, and sort by various metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsNoField selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard"
pageNoPage number for pagination (1-based). Default: 1
categoryNoFilter by category (optional)
minMarketCapNoMinimum market cap (optional)
maxMarketCapNoMaximum market cap (optional)
minVolumeNoMinimum volume (optional)
sortNoSort 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.
orderNoSort order (optional, default desc when sorting)
maxPagesNoWhen 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

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoScreener rows (coins) with market data. When `sort` is used, ranked client-side and `meta` records the sort details.
metaNoPagination / result metadata, present on list-style responses.

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness3/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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

The description clearly states the action ('Get') 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.

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus 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_botsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
botTypeYesBot type
fieldsNoField selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard"
pageNoPage number for pagination (1-based). Default: 1
statusNoFilter by bot status
paperContextNoPaper trading context (true = paper, false = real). Default: false

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoMatching bot records; fields present depend on the `fields` preset.
metaNoPagination / result metadata, present on list-style responses.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/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 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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_dealsA
Read-only
Inspect

List deals by type (DCA, Combo, or Terminal). Supports field selection presets. Supports filtering by status and botId.

ParametersJSON Schema
NameRequiredDescriptionDefault
dealTypeYesDeal type
fieldsNoField selection: preset ("minimal", "standard", "extended", "full") or comma-separated fields (e.g. "_id,uuid,settings.name,profit.total"). Default: "standard"
pageNoPage number for pagination (1-based). Default: 1
statusNoFilter by deal status
paperContextNoPaper trading context (true = paper, false = real). Default: false
botIdNoFilter by bot ID (optional)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoMatching deal records; fields present depend on the `fields` preset.
metaNoPagination / result metadata, present on list-style responses.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

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

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

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

Usage Guidelines4/5

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_presetsA
Read-only
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
botTypeYesBot type to list presets for
coinNoFilter to a single base asset, e.g. "BTC" (skips the closed-deals floor)
exchangeNoCanonical exchange, e.g. "binance" (use with coin)
strategyNoFilter by direction (optional)
limitNoMax coins to return (default 10, max 50)
summaryNoOmit the per-tier settings blob for a lightweight ranked list (default false)
includeNoDealsNoInclude coins with fewer than the minimum closed deals (default false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoOK on success, NOTOK on a handled API error.
reasonNoError reason when status is NOTOK; null otherwise.
dataNoCurated preset rows (one per coin), each with tiers × strategy, ROI, drawdown, and (unless summary) the full settings blob.
metaNoPagination / result metadata, present on list-style responses.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

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

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

Usage Guidelines3/5

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_botA
Destructive
Inspect

Manage bot lifecycle: start, stop, archive, restore, or change trading pairs (DCA only). Each action has specific requirements.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform on the bot
botIdYesBot 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).
botTypeYesBot type
paperContextNoPaper trading context (true = paper, false = real). Default: false
closeTypeNoClose type for stop action (dca/combo). "closeByMarket" closes all positions, "leave" pauses the bot.
closeGridTypeNoClose type for stop action (grid only)
cancelPartiallyFilledNoWhether to cancel partially filled orders when stopping (optional)
pairNoFull 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

A3.9/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_dealB
Destructive
Inspect

Manage deal operations: close a deal, add funds, or reduce funds. Each action has specific requirements.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform on the deal
dealIdYesDeal 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).
dealTypeYesDeal type
paperContextNoPaper trading context (true = paper, false = real). Default: false
closeTypeNoClose type for close action
botIdNoBot ID for addFunds/reduceFunds (alternative to dealId for dca/combo)
qtyNoAmount 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.
typeNoType: fixed amount or percentage
assetNoDenomination 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".
symbolNoSymbol override (optional)

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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_variableA
Destructive
Inspect

Create, update, or delete a global variable. Variables are user-defined constants accessible in strategies.

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesAction to perform
idNoVariable ID (required for update/delete)
nameNoVariable name (required for create, optional for update)
typeNoVariable type (required for create, optional for update)
valueNoVariable value (required for create, optional for update)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesBacktest mode. validate: confirm payload. estimate: check credit cost. request: async backtest. requestSync: wait for result.
botTypeYesBot type for the backtest
payloadYesBacktest 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).
paperContextNoPaper trading context (true = paper, false = real). Default: false
fieldsNoField selection for requestSync mode (optional)

TDQS

A3.7/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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

Given the tool's complexity (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.

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

Purpose5/5

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.

Usage Guidelines4/5

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_botA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
botTypeYesBot type (Grid does not support updates)
botIdYesBot 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).
paperContextNoPaper trading context (true = paper, false = real). Default: false
settingsYesSettings object with fields to update. Only include changed fields.

TDQS

A4.3/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_dealA
Destructive
Inspect

Update an existing deal. Pass only the fields you want to change. Settings object must be non-empty.

ParametersJSON Schema
NameRequiredDescriptionDefault
dealTypeYesDeal type
dealIdYesDeal 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).
paperContextNoPaper trading context (true = paper, false = real). Default: false
settingsYesSettings object with fields to update. Only include changed fields.

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 19 tool updatesv0.1.0
    • First observedapply_preset
    • First observedbacktest_info
    • First observedclone_bot
    • First observedcreate_bot
    • First observedcreate_deal
    • First observeddiscover
    • First observedget_account
    • First observedget_bot
    • First observedget_deal
    • First observedget_screener
    • First observedlist_bots
    • First observedlist_deals
    • First observedlist_presets
    • First observedmanage_bot
    • First observedmanage_deal
    • First observedmanage_global_variable
    • First observedrun_backtest
    • First observedupdate_bot
    • First observedupdate_deal

TDQS

A3.6/5.0

Scored across 19 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, covering bots, deals, backtesting, presets, account, screener, and global variables. No two tools overlap in functionality.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness3/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    MCP server for Binance USDT-M Futures trading — exposes tools for market data, account state, order management, and position/margin control.
    23
    6
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    MCP 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.
    19
    10 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
    -