Skip to main content
Glama
quantitats

quantitats-mcp

Official
by quantitats

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
QUANTITATS_API_ALGNoAlgorithm to use when both key material types are present (e.g., 'ed25519' or 'hmac').
QUANTITATS_API_URLNoBase URL for the API. Must be an origin with no path. Defaults to https://api.quantitats.comhttps://api.quantitats.com
QUANTITATS_API_KEY_IDYesYour API key ID (required for authentication).
QUANTITATS_API_SECRETNoHMAC-SHA256 secret used for signing requests. Alternative to providing a private key file or a secret file.
QUANTITATS_MCP_SCOPESNoComma-separated list of scopes (e.g., 'bots:read,trade:read') to advertise only the tools those scopes reach.
QUANTITATS_MCP_READ_ONLYNoSet to 'true' to hide all tools that change anything.false
QUANTITATS_API_SECRET_FILENoPath to a file containing the HMAC-SHA256 secret. Alternative to providing the secret directly or a private key file.
QUANTITATS_API_PRIVATE_KEY_FILENoPath 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

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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 bots:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 bots:write scope.

Rate limit: 30 requests per minute for your key, shared across every tool in the control-plane group. Changing configuration is metered far more tightly than reading it. Creating, reconfiguring, stopping and deleting all share this budget, so make one considered change rather than a sequence of adjustments.

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 bots:write scope.

Rate limit: 30 requests per minute for your key, shared across every tool in the control-plane group. Changing configuration is metered far more tightly than reading it. Creating, reconfiguring, stopping and deleting all share this budget, so make one considered change rather than a sequence of adjustments.

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 bots:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 bots:write scope.

Rate limit: 30 requests per minute for your key, shared across every tool in the control-plane group. Changing configuration is metered far more tightly than reading it. Creating, reconfiguring, stopping and deleting all share this budget, so make one considered change rather than a sequence of adjustments.

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 bots:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 bots:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 market:read scope.

Rate limit: 60 requests per hour for your key, shared across every tool in the venue-public group. Sixty an hour, because this serves a cached copy and the cache is good for the hour. Read an instrument list once and keep it. For prices more often than this, read the venue's own public API — it is free, authoritative, and answers far more often than this will.

get_tickerA

The current price for one symbol on one venue.

Requires the market:read scope.

Rate limit: 60 requests per hour for your key, shared across every tool in the venue-public group. Sixty an hour, because this serves a cached copy and the cache is good for the hour. Read an instrument list once and keep it. For prices more often than this, read the venue's own public API — it is free, authoritative, and answers far more often than this will.

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 trade:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 trade:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

list_ordersB

The account's order history, filtered and paged. Page with the nextBefore the response carries.

Requires the trade:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 trade:read scope.

Rate limit: 60 requests per minute for your key, shared across every tool in the venue-private group. Each of these calls the venue with your own key and spends your allowance there as well as here, so do not poll it. Name a venue when you only need one. For anything you would otherwise poll for, follow the order stream, which reports a fill when it happens instead of being asked whether one has.

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 trade:write scope.

Rate limit: 932 requests per minute for your key, shared across every tool in the trade-write group. This is the average of what the supported venues themselves allow one account, so it is not a figure to design around — a strategy that needs more than this needs the venue directly.

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 trade:write scope.

Rate limit: 932 requests per minute for your key, shared across every tool in the trade-write group. This is the average of what the supported venues themselves allow one account, so it is not a figure to design around — a strategy that needs more than this needs the venue directly.

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 trade:write scope.

Rate limit: 932 requests per minute for your key, shared across every tool in the trade-write group. This is the average of what the supported venues themselves allow one account, so it is not a figure to design around — a strategy that needs more than this needs the venue directly.

list_scriptsA

The account's strategy scripts, with the limits the editor enforces on them.

Requires the scripts:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

get_scriptA

One script's source, with when it was created and last changed.

Requires the scripts:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 scripts:read scope.

Rate limit: 600 requests per minute for your key, shared across every tool in the default group. Ten a second. These read stored records rather than calling a venue, which is why they are cheap.

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 scripts:write scope.

Rate limit: 30 requests per minute for your key, shared across every tool in the control-plane group. Changing configuration is metered far more tightly than reading it. Creating, reconfiguring, stopping and deleting all share this budget, so make one considered change rather than a sequence of adjustments.

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 scripts:write scope.

Rate limit: 30 requests per minute for your key, shared across every tool in the control-plane group. Changing configuration is metered far more tightly than reading it. Creating, reconfiguring, stopping and deleting all share this budget, so make one considered change rather than a sequence of adjustments.

delete_scriptA

Removes a script from the account's library.

Requires the scripts:write scope.

Rate limit: 30 requests per minute for your key, shared across every tool in the control-plane group. Changing configuration is metered far more tightly than reading it. Creating, reconfiguring, stopping and deleting all share this budget, so make one considered change rather than a sequence of adjustments.

list_balancesA

Balances across every venue the account holds keys for.

Requires the portfolio:read scope.

Rate limit: 60 requests per minute for your key, shared across every tool in the venue-private group. Each of these calls the venue with your own key and spends your allowance there as well as here, so do not poll it. Name a venue when you only need one. For anything you would otherwise poll for, follow the order stream, which reports a fill when it happens instead of being asked whether one has.

get_venue_balancesA

Balances at one venue.

Requires the portfolio:read scope.

Rate limit: 60 requests per minute for your key, shared across every tool in the venue-private group. Each of these calls the venue with your own key and spends your allowance there as well as here, so do not poll it. Name a venue when you only need one. For anything you would otherwise poll for, follow the order stream, which reports a fill when it happens instead of being asked whether one has.

list_positionsA

Open derivative positions across the account.

Requires the portfolio:read scope.

Rate limit: 60 requests per minute for your key, shared across every tool in the venue-private group. Each of these calls the venue with your own key and spends your allowance there as well as here, so do not poll it. Name a venue when you only need one. For anything you would otherwise poll for, follow the order stream, which reports a fill when it happens instead of being asked whether one has.

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 ws-ticket group. Listing the streams shares a budget with opening one. Read it once; it does not change while a key lives.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.9/5.0

Scored across 26 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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.

Maintenance

ActivitySlowing
ResponsivenessNo issues