quantitats-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| QUANTITATS_API_ALG | No | Algorithm to use when both key material types are present (e.g., 'ed25519' or 'hmac'). | |
| QUANTITATS_API_URL | No | Base URL for the API. Must be an origin with no path. Defaults to https://api.quantitats.com | https://api.quantitats.com |
| QUANTITATS_API_KEY_ID | Yes | Your API key ID (required for authentication). | |
| QUANTITATS_API_SECRET | No | HMAC-SHA256 secret used for signing requests. Alternative to providing a private key file or a secret file. | |
| QUANTITATS_MCP_SCOPES | No | Comma-separated list of scopes (e.g., 'bots:read,trade:read') to advertise only the tools those scopes reach. | |
| QUANTITATS_MCP_READ_ONLY | No | Set to 'true' to hide all tools that change anything. | false |
| QUANTITATS_API_SECRET_FILE | No | Path to a file containing the HMAC-SHA256 secret. Alternative to providing the secret directly or a private key file. | |
| QUANTITATS_API_PRIVATE_KEY_FILE | No | Path to an Ed25519 private key file used for signing requests. Alternative to providing an HMAC secret. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_botsA | Every bot on the account: its state and run mode, the script it runs, and a summary of the fleet. Also returns the scripts and run modes a new bot can be created with. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| create_botA | Creates and starts a bot running one of the account's scripts. Answers 409 if the name is taken and 403 if the plan's bot limit is reached, naming the limit. Mode defaults to paper; sim settings are refused on a live bot rather than ignored. A live bot trades real funds. Requires the Rate limit: 30 requests per minute for your key, shared across every tool in the |
| stop_botA | Stops the bot and retires it. Its orders and analytics remain readable afterwards. This does not cancel orders the bot already has resting at a venue — use cancel_orders for that. Requires the Rate limit: 30 requests per minute for your key, shared across every tool in the |
| get_bot_configA | That bot's settings: the fields its script declares, the values this bot overrides, its run mode, its simulator settings if it is a paper bot, and its loss limit (a number, or an object with max_loss). Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| update_bot_configA | Replaces the overrides — a full replacement, not a merge, so send every override the bot should keep — and RESTARTS the bot. Orders already resting at a venue are not cancelled by this. Requires the Rate limit: 30 requests per minute for your key, shared across every tool in the |
| list_bot_ordersA | Every order that bot has placed, open and historic, newest first. Readable even for a bot that has been stopped. An unknown bot answers with an empty list, not an error. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| get_bot_analyticsA | That bot's realized profit and loss and its fill statistics, optionally over a time window. Money figures are decimal strings keyed by asset or symbol; add two together only when they share one. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| list_instrumentsA | Every symbol that venue lists, with its tick and lot rules. Public market structure — read this before placing an order, because a price or quantity off the venue's grid is refused by the venue. Requires the Rate limit: 60 requests per hour for your key, shared across every tool in the |
| get_tickerA | The current price for one symbol on one venue. Requires the Rate limit: 60 requests per hour for your key, shared across every tool in the |
| list_venuesA | The venue list and, for each, whether the account has keys stored for it and whether the plan permits it. That is account state, which is why it costs trade:read rather than market:read. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| list_open_ordersA | Every order across the account that can still trade, from bots and from manual placement alike, each one carrying which bot placed it. This is the account's own view of the book. It takes no filters: filter the result yourself, or use list_orders, which does filter. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| list_ordersB | The account's order history, filtered and paged. Page with the nextBefore the response carries. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| list_venue_open_ordersA | One venue's own view of the account's resting orders, including any placed from the venue's own app. Deliberately separate from list_open_orders: comparing the two is how a disagreement becomes visible. Requires the Rate limit: 60 requests per minute for your key, shared across every tool in the |
| place_orderA | Submits one order with real funds and answers with it as the venue acknowledged it. Quantities and prices are decimal STRINGS, not numbers, so nothing is lost to floating point. A LIMIT order needs a price; a stop or take-profit order needs a stopPrice. Check list_instruments first: a price or size off the venue's grid is refused. Requires the Rate limit: 932 requests per minute for your key, shared across every tool in the |
| cancel_orderA | Withdraws one resting order, addressed by the client order id it has carried since it was filed — which is the identifier it has before the venue has answered at all. Requires the Rate limit: 932 requests per minute for your key, shared across every tool in the |
| cancel_ordersA | Withdraws every open order matching the filter, and answers with what happened to each one. WITH NO FILTER THIS CANCELS EVERYTHING ON THE ACCOUNT, including orders the account's bots are working — pass origin=manual to spare those. Narrow it before calling it. Requires the Rate limit: 932 requests per minute for your key, shared across every tool in the |
| list_scriptsA | The account's strategy scripts, with the limits the editor enforces on them. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| get_scriptA | One script's source, with when it was created and last changed. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| get_script_configA | The settings that script declares — each field's name, type, default and hint — which is what a bot running it may override. Requires the Rate limit: 600 requests per minute for your key, shared across every tool in the |
| create_scriptA | Stores a new strategy script. Answers 409 if the name is already in use and 403 if the plan's script allowance is used, naming the plan and the count. Editing or deleting a script is never counted. Requires the Rate limit: 30 requests per minute for your key, shared across every tool in the |
| update_scriptA | Replaces a script's whole source. Bots already running it keep running the version they started with until they are restarted. An edit that changes the settings the script declares is refused with a 409; save it under a new name instead. Requires the Rate limit: 30 requests per minute for your key, shared across every tool in the |
| delete_scriptA | Removes a script from the account's library. Requires the Rate limit: 30 requests per minute for your key, shared across every tool in the |
| list_balancesA | Balances across every venue the account holds keys for. Requires the Rate limit: 60 requests per minute for your key, shared across every tool in the |
| get_venue_balancesA | Balances at one venue. Requires the Rate limit: 60 requests per minute for your key, shared across every tool in the |
| list_positionsA | Open derivative positions across the account. Requires the Rate limit: 60 requests per minute for your key, shared across every tool in the |
| list_streamsA | The live streams this deployment serves and the scope each needs. Discovery only — a stream is a long-lived connection and cannot be read through a tool call, so use this to find out what exists and read the same data through the list tools. Requires the key to be valid. Rate limit: 60 requests per hour for your key, shared across every tool in the |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Most tools target a distinct resource+action and the descriptions carefully differentiate them (e.g. list_open_orders vs list_venue_open_orders vs list_bot_orders, and get_bot_config vs get_script_config). However, the cluster of order-listing tools and the cancel_order/cancel_orders singular-vs-plural pair require close reading to avoid misselection.
The set uses a consistent verb_noun snake_case pattern (list_*, get_*, create_*, update_*, delete_*, place_order, cancel_*). The only real deviation is cancel_order vs cancel_orders, where singular/plural carries meaning but is easy to misread.
At 26 tools it sits at the heavy end, but the domain genuinely spans bots, scripts, orders, portfolio, market data, and streams, and each tool maps to a distinct operation. It is slightly over-scoped rather than padded.
Coverage is strong: full script CRUD, bot lifecycle (create/stop/config/analytics/orders), order placement and both single and bulk cancellation, plus portfolio and market reads. Minor gaps like an order-modify/replace or single-order status tool exist but agents can work around them.