quantower-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@quantower-mcpshow my open positions and P&L in Quantower"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
quantower-mcp
Serveur MCP (Model Context Protocol) local permettant de lire et piloter Quantower depuis un client IA (Claude Desktop, Cursor, Codex…) via un bridge C# chargé dans Quantower.
⚠️ Sécurité avant tout : le serveur MCP démarre en lecture seule (
read_only) et le bridge C# refuse l'écriture par défaut. L'écriture doit être activée explicitement des deux côtés, exigeconfirm: truesur chaque appel, respecte des plafonds, et ne doit être utilisée que sur un compte démo ou le Trading Simulator pendant le développement.
Sommaire
Related MCP server: TradingView MCP Bridge
Architecture
Quantower n'expose aucune API externe : son API (TradingPlatform.BusinessLayer) est in-process, utilisable
uniquement par des modules C# chargés dans le terminal. D'où deux composants :
┌──────────────────────┐ stdio (MCP) ┌───────────────────────────┐ HTTP JSON ┌───────────────────────────────┐
│ Client MCP │ ◄─────────────► │ quantower-mcp-server │ ◄───────────────► │ QuantowerMcpBridge (plugin C#)│
│ Claude / Cursor │ │ TypeScript + MCP SDK │ 127.0.0.1:8765 │ dans Quantower (Core.Instance)│
└──────────────────────┘ └───────────────────────────┘ └───────────────────────────────┘bridge/QuantowerMcpBridge— plugin C# : expose une API HTTP JSON sur la boucle locale (http://localhost:8765, ainsi quehttp://127.0.0.1:8765ethttp://[::1]:8765), authentifiée par un token Bearer généré au démarrage, avec plafonds, écriture désactivée par défaut et journal d'audit.src/— serveur MCP TypeScript (@modelcontextprotocol/sdk), transport stdio, client HTTP du bridge (timeouts, retries sur les GET uniquement, cache TTL court).
Prérequis
Composant | Version | Usage |
Node.js | ≥ 20 | serveur MCP |
.NET SDK | ≥ 8 (10 pour les Quantower récents) | bridge C# ( |
Quantower | récente (Windows) | bridge réel ; l'extension VS Quantower Algo est gratuite |
Windows 10/11 | — | Quantower et le bridge sont Windows-only |
Le bridge compile et s'exécute sans Quantower en mode stub (données de démonstration) : utile pour développer le serveur MCP et les tests.
Installation
Seul Node.js ≥ 20 est requis pour le serveur MCP. Deux chemins selon votre usage :
Installation en une commande (Windows, recommandé)
Si vous êtes sous Windows et voulez le bridge Quantower et le serveur MCP configurés sans rien faire à la main :
git clone https://github.com/mattdef/quantower-mcp.git
cd quantower-mcp
powershell -ExecutionPolicy Bypass -File .\install.ps1(ou, depuis une invite cmd : install.cmd)
Le script PowerShell 5.1+, idempotent et non destructif :
vérifie les prérequis (Node.js ≥ 20, .NET SDK ≥ 8, git) ;
détecte votre installation Quantower (
C:\Quantower,%ProgramFiles%\Quantower,%ProgramFiles(x86)%\Quantower) ;compile le bridge avec le SDK détecté et déploie le module dans
bin\plug-ins\QuantowerMcpBridge\;compile le serveur MCP (
npm install,npm run build) ;configure les clients détectés (OpenCode, Claude Code, Codex, Claude Desktop) — lecture seule (
QUANTOWER_TRADING_ENABLED=false) et sans aucun secret (le serveur relit%LOCALAPPDATA%\quantower-mcp\bridge-token) ; chaque fichier modifié est sauvegardé en.bak-<horodatage>;vérifie
/health, lance le smoke test (lecture) et affiche les réservationsnetsh http add urlaclnécessaires ;récapitule ce qui a été fait et ce qui reste manuel : redémarrage de Quantower (le script ne ferme jamais Quantower) puis redémarrage des clients MCP.
Options : -DryRun (simulation complète, aucune écriture), -Demo (démonstration sans Quantower,
bridge factice), -SkipClients (ne pas toucher aux configs clients), -SetUrlAcl (exécuter les
netsh http add urlacl — console administrateur), -Port 8765 (port local par défaut).
Les chemins A et B ci-dessous restent la référence pour un usage manuel, en CI ou pour une configuration personnalisée.
Chemin A — clone local (usage manuel ou CI)
git clone https://github.com/mattdef/quantower-mcp.git
cd quantower-mcp
npm install
npm run build
node dist/server.jsLe clone est aussi nécessaire pour le bridge C# (bridge/), les scripts de développement (scripts/) et
npm run inspector. C'est le chemin le plus stable : la recette npx github: (Chemin B) est bloquée par
défaut sur npm ≥ 12 (voir Dépannage).
Chemin B — sans clone (npx github:)
Le serveur se lance directement depuis GitHub (aucune publication npm nécessaire) :
npx -y github:mattdef/quantower-mcpnpm clone le dépôt, compile le TypeScript puis démarre dist/server.js sur stdio. En pratique, c'est le
client MCP qui exécute cette commande pour vous : appliquez la recette de votre client —
OpenCode, Claude Code, Codex,
Claude Desktop,
Cursor.
⚠️ npm ≥ 12 : les sources git sont refusées par défaut (
allow-git=none→EALLOWGIT) et leprepare(build) d'une source git n'est exécuté qu'après approbation explicite des scripts. Cette recette nécessite donc un opt-in npm (voir Dépannage) ; sur npm ≤ 11, elle fonctionne (avertissements possibles sur les 11.x récents). En cas de doute, utilisez le Chemin A.
Ensuite
Bridge : bridge C# dans Quantower (voir Installation du bridge) ou bridge factice pour tester sans Quantower (voir Démarrage rapide).
Vérification du bridge :
node scripts/smoke-bridge.mjs --url http://127.0.0.1:8765 --token <token>(Chemin A) — substituez<token>par la valeur du fichier%LOCALAPPDATA%\quantower-mcp\bridge-token(smoke-bridge.mjsne relit pas ce fichier : il n'accepte que--tokenouQUANTOWER_BRIDGE_TOKEN) ; sous PowerShell :--token (Get-Content "$env:LOCALAPPDATA\quantower-mcp\bridge-token").Client MCP : copiez une recette depuis Configuration des clients MCP.
Démarrage rapide (développement sans Quantower)
Ordre recommandé, de zéro à un client MCP branché :
Prérequis : Node.js ≥ 20 (
node --version) — puis, dans le clone local :npm installpuisnpm run build.Bridge : bridge factice (fixtures JSON) sur le port 8765, à laisser tourner dans son terminal :
node scripts/fake-bridge.mjs --port 8765 --token dev-token.Smoke test (dans un second terminal) :
node scripts/smoke-bridge.mjs --url http://127.0.0.1:8765 --token dev-token.Serveur MCP (optionnel : le client MCP le lance lui-même) — sous PowerShell (cible Windows) :
$env:QUANTOWER_BRIDGE_URL="http://127.0.0.1:8765"; $env:QUANTOWER_BRIDGE_TOKEN="dev-token"; node dist/server.jsbash / Git Bash :
QUANTOWER_BRIDGE_URL=http://127.0.0.1:8765 QUANTOWER_BRIDGE_TOKEN=dev-token node dist/server.js.Client MCP : appliquez une recette de Configuration des clients MCP (OpenCode, Claude Code, Codex, Claude Desktop, Cursor).
Vérification :
opencode mcp list,claude mcp listoucodex mcp list— le serveurquantowerdoit apparaître (sinon/mcpdans le client). En secours, sans client :npm run inspector.
Le token
dev-tokenci-dessus n'est utile qu'avec le bridge factice. Avec le bridge C# réel, le serveur relit tout seul%LOCALAPPDATA%\quantower-mcp\bridge-token: aucun token à copier dans une config.
Alternative : le bridge C# en mode stub (mêmes données, code de production côté HTTP) :
dotnet run --project bridge/QuantowerMcpBridge -- --port 8765 --token dev-token(ajoutez--tradingpour activer l'écriture — désactivée par défaut côté bridge, comme côté MCP).
Installation du bridge dans Quantower
La procédure complète (build avec le SDK Quantower, déploiement, checklist Phase 0) est dans
bridge/README.md. Résumé :
Compiler le bridge :
dotnet build bridge/QuantowerMcpBridge/QuantowerMcpBridge.csproj -c Release -p:QuantowerSdkDir="C:\Quantower\TradingPlatform\v1.146.18\bin"(en mode SDK, le projet ciblenet10.0et produitQuantowerMcpBridge.dll).Copier
QuantowerMcpBridge.dlldans<QuantowerSdkDir>\plug-ins\QuantowerMcpBridge\, redémarrer Quantower puis ouvrir une fois le panneau « Quantower MCP Bridge » (Ajouter un panneau) : son ouverture démarre le bridge, sa fermeture l'arrête (classe de basePlugin— fait vérifié, voirbridge/README.md§4).Vérifier que le bridge répond :
node scripts/smoke-bridge.mjs --url http://127.0.0.1:8765 --token <token>— substituez<token>par la valeur du fichier%LOCALAPPDATA%\quantower-mcp\bridge-token(smoke-bridge.mjsne relit pas ce fichier) ; sous PowerShell :--token (Get-Content "$env:LOCALAPPDATA\quantower-mcp\bridge-token").Côté config MCP, rien à copier : le serveur MCP relit automatiquement
%LOCALAPPDATA%\quantower-mcp\bridge-token(voir Dépannage en cas de[BRIDGE_UNAUTHORIZED]).
Tout ce qui précède est automatisé par
install.ps1(voir Installation en une commande).
Configuration
Variables d'environnement du serveur MCP (src/config.ts) :
Variable | Défaut | Rôle |
|
| URL du bridge (loopback uniquement). |
| — | Token Bearer. Prioritaire sur le fichier. |
|
| Fichier de token écrit par le bridge (relu à chaque appel). |
|
| Timeout par appel. |
|
| Retries des GET idempotents (jamais sur les écritures). |
|
| Durée du cache des lectures ( |
|
|
|
|
|
|
|
| Plafond de quantité par ordre ( |
|
| Plafond de notionnel estimé ( |
|
|
|
|
| Nombre maximum de barres par appel d'historique. |
|
|
|
Pour autoriser l'écriture : QUANTOWER_TRADING_ENABLED=true (et ne pas mettre QUANTOWER_READ_ONLY=true).
Configuration des clients MCP
Aucun secret dans les configs : le serveur relit par défaut le token écrit par le bridge (
%LOCALAPPDATA%\quantower-mcp\bridge-token). Toutes les recettes ci-dessous restent en lecture seule (QUANTOWER_TRADING_ENABLED=false). Fichiers prêts à copier dansexamples/.
Placeholder
<vous>: dans ce README comme dans les fichiersexamples/, remplacez<vous>par votre nom de session Windows (par exemplemcast) ; si un chemin contient des espaces, entourez-le de guillemets doubles.
Variables d'environnement les plus utilisées (tableau complet : Configuration) :
Variable | Défaut | Rôle |
|
| URL du bridge (loopback uniquement). |
|
| Recommandé : relu à chaque appel — aucun secret à écrire dans une config. |
| — | Token en clair, prioritaire sur le fichier. Réservé au développement : ne jamais committer. |
|
|
|
|
|
|
OpenCode
Config projet opencode.jsonc (ou globale ~/.config/opencode/opencode.json). Fichier complet :
examples/opencode.jsonc.
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"quantower": {
"type": "local",
"command": ["node", "C:\\Users\\<vous>\\Documents\\Projects\\quantower-mcp\\dist\\server.js"],
"enabled": true,
"environment": {
"QUANTOWER_BRIDGE_URL": "http://127.0.0.1:8765",
"QUANTOWER_TRADING_ENABLED": "false"
}
}
}
}CLI :
opencode mcp add quantower --env QUANTOWER_BRIDGE_URL=http://127.0.0.1:8765 --env QUANTOWER_TRADING_ENABLED=false -- node C:\Users\<vous>\Documents\Projects\quantower-mcp\dist\server.js(ajoutez--globalpour la config globale), puisopencode mcp list.Variante sans clone :
"command": ["npx", "-y", "github:mattdef/quantower-mcp"]— sur npm ≥ 12, opt-in npm requis (voir Dépannage,EALLOWGIT).Substitution de variable machine :
"environment": { "QUANTOWER_BRIDGE_URL": "{env:QUANTOWER_BRIDGE_URL}" }.Désactivation temporaire : passer
"enabled"àfalse.
Claude Code
Claude Code stocke lui-même les serveurs MCP (pas de fichier à éditer à la main). Recette détaillée :
examples/claude-code.md.
claude mcp add quantower --transport stdio --scope user --env QUANTOWER_BRIDGE_URL=http://127.0.0.1:8765 --env QUANTOWER_TRADING_ENABLED=false -- node "C:\Users\<vous>\Documents\Projects\quantower-mcp\dist\server.js"À taper sur une seule ligne : ni PowerShell ni
cmdne comprennent les continuations\(réservées à bash / Git Bash).
Scopes :
local(défaut, projet courant),project(.mcp.jsonversionnable),user(global).Équivalent
.mcp.jsonde projet (claude mcp add-json quantower '<objet>' -s project) :
{
"mcpServers": {
"quantower": {
"type": "stdio",
"command": "node",
"args": ["C:\\Users\\<vous>\\Documents\\Projects\\quantower-mcp\\dist\\server.js"],
"env": {
"QUANTOWER_BRIDGE_URL": "http://127.0.0.1:8765",
"QUANTOWER_TRADING_ENABLED": "false"
}
}
}
}Variante sans clone : terminer par
-- npx -y github:mattdef/quantower-mcp— sur npm ≥ 12, opt-in npm requis (voir Dépannage,EALLOWGIT).Vérification :
claude mcp list,claude mcp get quantower, ou/mcpdans la TUI.
Codex
Extrait à fusionner dans ~/.codex/config.toml. Fichier complet :
examples/codex-config.toml.
[mcp_servers.quantower]
command = "node"
args = ["C:\\Users\\<vous>\\Documents\\Projects\\quantower-mcp\\dist\\server.js"]
enabled = true
startup_timeout_sec = 20
tool_timeout_sec = 30
[mcp_servers.quantower.env]
QUANTOWER_BRIDGE_URL = "http://127.0.0.1:8765"
QUANTOWER_TRADING_ENABLED = "false"CLI :
codex mcp add quantower --env QUANTOWER_BRIDGE_URL=http://127.0.0.1:8765 -- node C:\Users\<vous>\Documents\Projects\quantower-mcp\dist\server.js, puiscodex mcp list(ou/mcpdans l'interface).Variante sans clone :
command = "npx",args = ["-y", "github:mattdef/quantower-mcp"]— sur npm ≥ 12, opt-in npm requis (voir Dépannage,EALLOWGIT).Hériter d'une variable d'environnement hôte sans l'écrire dans le TOML :
env_vars = ["QUANTOWER_BRIDGE_TOKEN"](dans[mcp_servers.quantower]). Recommandé : ne rien mettre — le fichier de token par défaut suffit.
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"quantower": {
"command": "node",
"args": ["C:\\Users\\<vous>\\Documents\\Projects\\quantower-mcp\\dist\\server.js"],
"env": {
"QUANTOWER_BRIDGE_URL": "http://127.0.0.1:8765",
"QUANTOWER_BRIDGE_TOKEN_FILE": "C:\\Users\\<vous>\\AppData\\Local\\quantower-mcp\\bridge-token",
"QUANTOWER_LOG_LEVEL": "info"
}
}
}
}Cursor (.cursor/mcp.json ou config utilisateur)
{
"mcpServers": {
"quantower": {
"command": "node",
"args": ["C:\\Users\\<vous>\\Documents\\Projects\\quantower-mcp\\dist\\server.js"],
"env": {
"QUANTOWER_BRIDGE_TOKEN_FILE": "C:\\Users\\<vous>\\AppData\\Local\\quantower-mcp\\bridge-token"
}
}
}
}Le serveur MCP peut relire lui-même le fichier de token écrit par le bridge : c'est la configuration recommandée si le bridge change de token à chaque démarrage.
Sécurité et garde-fous
Garde-fou | Détail |
Lecture seule par défaut | Les tools d'écriture ne sont pas enregistrés tant que |
| Chaque tool d'écriture refuse l'appel sinon ( |
Plafonds |
|
Double contrôle côté bridge | Le bridge C# revalide plafonds (y compris sur les modifications d'ordre) et cohérence compte/symbole, et refuse l'écriture par défaut ; activez-la explicitement avec |
Loopback uniquement | Le bridge enregistre les préfixes |
Token par session | Token aléatoire généré au démarrage du bridge, écrit dans |
Audit | Chaque opération d'écriture est journalisée dans |
Démo uniquement | Les tests d'écriture ne doivent viser qu'un compte démo / Trading Simulator — jamais un compte réel. |
Pas de rejeu d'écriture | Aucun retry automatique sur les opérations d'ordre : impossible d'envoyer deux fois le même ordre. |
Outils, ressources et prompts exposés
Lecture (toujours disponibles)
Tool | Description |
| Santé du bridge, version, mode ( |
| Connexions actives et |
| Comptes (balance, devise, PnL). |
| Recherche d'instruments. |
| Bid/Ask/Last/volume. |
| Bougies OHLCV (timeframes |
| Carnet d'ordres (Level 2). |
| Portefeuille et exécutions. |
Écriture (uniquement si QUANTOWER_TRADING_ENABLED=true, confirm: true requis)
Tool | Description |
| Market / Limit / Stop / StopLimit + SL/TP ( |
| Modification quantité/prix/déclencheur/TIF. |
| Annulation d'un ordre. |
| Annulation groupée (filtre |
| Fermeture totale ou partielle. |
| Fermeture groupée (filtre obligatoire). |
Ressources : quantower://connections, quantower://accounts, quantower://positions, quantower://orders,
quantower://symbols/{connectionId}/{symbolId}.
Prompts : briefing-marche, revue-positions, checklist-avant-ordre.
Tests, scripts et inspection
npm test # vitest (mock bridge + fixtures, sans réseau externe)
npm run typecheck # tsc --noEmit sur src + tests
npm run build # compilation du serveur MCP dans dist/
npm run inspector # @modelcontextprotocol/inspector
npm run fake-bridge # bridge factice sur 8765 (token dev-token)
npm run smoke-bridge # vérifie le contrat HTTP du bridgeLes fixtures scripts/fixtures/*.json figent le contrat DTO bridge ↔ MCP : toute évolution doit être
répercutée dans le bridge C#, src/bridge-types.ts et les fixtures.
Dépannage
Symptôme | Cause probable | Action |
| Quantower fermé, module non chargé, mauvais port | Lancez Quantower avec le bridge, vérifiez |
| Token absent/différent | Par défaut rien à configurer : le serveur relit |
|
| Utilisez |
| Historique trop volumineux | Réduisez |
| Ordre déjà annulé/terminé | Rechargez l'état avec |
| Mode read_only (MCP) ou écriture désactivée côté bridge | MCP : |
| Plafond dépassé | Réduisez la taille ou ajustez les plafonds. |
Erreur d'accès refusé au démarrage du bridge | Réservation URL HTTP.SYS | Une réservation par préfixe : |
| Le client n'exécute pas | Utilisez |
| npm ≥ 12 refuse les sources git par défaut ( | Chemin A (clone local) : fiable quel que soit npm. Sinon opt-in via un |
| Politique npm | Chemin A : |
Serveur absent de | Config invalide ou non rechargée | Vérifiez la syntaxe (JSONC/JSON/TOML) puis relancez le client ; rejouez la commande de la recette à la main pour voir l'erreur. |
| Node.js absent ou trop ancien | Installez Node.js ≥ 20 ( |
Échec de spawn si le chemin contient des espaces | Chemin non quoté dans la config client | Entourez le chemin de guillemets dans la config ; alternative : recette |
Premier lancement lent (Codex) | Recette | Augmentez |
Structure du dépôt
quantower-mcp/
├── bridge/QuantowerMcpBridge/ # plugin C# (Dtos/, HttpServer.cs, CoreGateway.cs, StubCoreGateway.cs, …)
├── examples/ # recettes de config clients (opencode.jsonc, claude-code.md, codex-config.toml)
├── src/ # serveur MCP TypeScript (tools/, resources/, prompts/)
├── tests/ # vitest + mock bridge (fixtures partagées)
├── scripts/ # fake-bridge, smoke-bridge, fixtures JSON
├── LICENSE
├── README.md
└── package.json tsconfig.json vitest.config.tsRoadmap et hors scope
Phase | Contenu | État |
0 | Cadrage + spike bridge dans Quantower | à valider (voir |
1 | Bridge lecture (HTTP JSON complet) | implémenté (stub exécutable ; accès réel à finaliser en Phase 0) |
2 | Serveur MCP lecture + resources + tests | implémenté |
3 | Bridge écriture (plafonds, audit) | implémenté (stub exécutable ; accès réel à finaliser) |
4 | Serveur MCP écriture + prompts | implémenté |
5 | Documentation, packaging, E2E | documentation faite ; packaging optionnel |
Hors scope v1 : pilotage de l'UI (panneaux, graphiques, drawings), backtests/optimisation, streaming
de ticks via WebSocket (/events renvoie 501 NOT_IMPLEMENTED), multi-comptes distants, exposition
réseau, publication npm/Marketplace.
Available Tools
11 toolsquantower_get_domCarnet d'ordres (DOM)ARead-only
Renvoie la profondeur de marché (Level 2) d'un instrument : listes bids/asks {price, size}. Peut être indisponible selon la connexion ou la licence Quantower.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Profondeur par côté (défaut 10, max 50). | |
| symbolId | Yes | Identifiant de l'instrument (Symbol.Name). | |
| connectionId | No | Connexion à utiliser si l'instrument existe sur plusieurs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, and the description adds genuine context on top: the return structure (bid/ask lists of price/size) and the fact that the call can fail for connection- or license-related reasons. It stops short of saying how to detect or work around that unavailability.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the resource, the data shape, and the main caveat with zero filler. Nothing to trim.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully describes the response shape and the environmental precondition for failure, and the input schema carries the parameter detail. Adequate for a three-parameter read tool, though it omits any hint of pagination/partial-depth behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so depth, symbolId and connectionId are fully documented in the schema; baseline is 3. The description adds nothing about parameter semantics (e.g., how depth interacts with the two-sided list) beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (Level 2 market depth) and even the payload shape (bids/asks {price, size}), which implicitly separates it from quantower_get_quote's top-of-book. However, it never names the sibling it complements or contrasts with, so an agent must infer the Level 1 vs Level 2 split itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no when-to-use or when-not-to-use guidance relative to quantower_get_quote or the other market-data siblings. The only condition mentioned ('peut être indisponible selon la connexion ou la licence') is an availability caveat, not routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_get_historyHistorique OHLCVARead-only
Renvoie les bougies OHLCV d'un instrument (timeframes : 1m, 5m, 15m, 30m, 1h, 2h, 4h, 1d, 1w). Le nombre de barres est plafonné à QUANTOWER_MAX_BARS (actuellement 500). Cette lecture n'est pas mise en cache : réduisez limit pour les gros historiques.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Fin de plage ISO 8601, ex. 2026-10-13T00:00:00Z. | |
| from | No | Début de plage ISO 8601, ex. 2026-10-01T00:00:00Z. | |
| limit | No | Nombre maximum de barres (défaut 200, max 500). | |
| symbolId | Yes | Identifiant de l'instrument (Symbol.Name). | |
| timeframe | Yes | Granularité des bougies. | |
| connectionId | No | Connexion à utiliser si l'instrument existe sur plusieurs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true, so the description carries real extra weight: it discloses the hard bar cap (QUANTOWER_MAX_BARS, currently 500) and that reads are not cached, which affects call strategy. It stops short of describing response shape or pagination behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: purpose first, then the cap, then the caching/perf caveat. No filler, though the timeframe enumeration partly duplicates the schema enum and could be trimmed.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and six parameters, the description does cover the operation's constraints and read-only nature adequately for an agent to call it correctly. It could go further by sketching the returned bar structure (OHLCV field layout, ordering) since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and every parameter (symbolId, timeframe, from, to, limit, connectionId) is documented in the schema, so the baseline is 3. The description restates the timeframe list and the limit cap rather than adding format or interaction details beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a precise verb and resource ('Renvoie les bougies OHLCV d'un instrument') and enumerates the supported timeframes, which immediately separates it from siblings such as quantower_get_quote, quantower_get_dom and quantower_get_trades. An agent can identify the tool's output domain without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case (historical candle retrieval) and gives a tuning hint ('réduisez limit pour les gros historiques'), but never states when to choose this over alternatives, nor any exclusions or prerequisites. Usage is inferred rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_get_ordersOrdres en coursARead-only
Liste les ordres actifs (working) : orderId, orderType, status, quantity, filledQuantity, price, triggerPrice. Filtrable par connectionId / accountId.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Filtre compte. | |
| connectionId | No | Filtre connexion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safe-read profile is covered. The description adds real value by clarifying the '(working)' qualifier and enumerating returned fields, but omits pagination, ordering, and whether results are limited when no filter is supplied. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, followed by the returned fields and the filter options. No filler and no repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parameterless-required, read-only list tool with no output schema, the description covers what the tool returns and how to narrow it, which is enough to call it correctly. Only the behavior with no filters (full dump? capped?) is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both filters are already documented in the schema. The description only restates that filtering happens via connectionId/accountId and adds no syntax, formatting, or mutual-exclusivity detail. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Liste les ordres actifs') and scopes it to working orders only, which implicitly separates it from quantower_get_orders_history. It also enumerates the returned fields, so the agent knows exactly what it gets. It does not name the sibling explicitly, keeping it shy of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description tells the agent the result can be narrowed by connectionId or accountId, which implies the usage context (scoped lookups). However it never states when to prefer this tool over siblings such as quantower_get_orders_history or quantower_get_trades, nor any prerequisites. Usage is implied, not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_get_orders_historyHistorique des ordresARead-only
Historique des ordres terminés (Core.GetOrdersHistory) : statuts filled/cancelled/rejected, quantités exécutées. Filtrable par plage ISO 8601, connectionId / accountId, avec limit.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Fin de plage ISO 8601 UTC. | |
| from | No | Début de plage ISO 8601 UTC. | |
| limit | No | Nombre maximum d'ordres renvoyés (défaut 100, max 1000). | |
| accountId | No | Filtre compte. | |
| connectionId | No | Filtre connexion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this is a safe read, so the description carries a lighter burden. It usefully discloses that only terminal statuses (filled/cancelled/rejected) and executed quantities are returned, which is real behavioral context. It stops short of describing pagination, ordering, or auth requirements.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence with the core purpose front-loaded and no filler. It is compact and information-bearing, though the parenthetical API reference and list of filters make it slightly crowded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, all-optional-parameter query with no output schema, the description covers the essentials: what population is returned (terminal-status orders), which fields are relevant (executed quantities), and how to filter. The absence of an output schema is partly offset by naming returned statuses and quantities.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented with formats and bounds (ISO 8601 UTC, default 100 / max 1000). The description only restates the filter categories (range, connectionId/accountId, limit) without adding syntax or semantics beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (orders history) and scopes it with 'terminés' (completed), which meaningfully distinguishes it from the sibling quantower_get_orders. It also names the underlying Core.GetOrdersHistory call, adding traceability. It does not, however, explicitly name the alternative sibling to route against.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'ordres terminés' scoping implies when to use this over quantower_get_orders (completed vs. active orders), but the usage boundary is left to inference. There are no explicit when-not conditions or prerequisites stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_get_positionsPositions ouvertesBRead-only
Liste les positions ouvertes (positionId, symbolId, accountId, side, quantity, openPrice, NetPnL). Filtrable par connectionId / accountId.
| Name | Required | Description | Default |
|---|---|---|---|
| accountId | No | Filtre compte. | |
| connectionId | No | Filtre connexion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile. Since there is no output schema, the description usefully lists the returned fields (positionId, NetPnL, etc.), which adds return-format context, but it says nothing about default behavior when no filter is given or volume/limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the core purpose and field list front-loaded ahead of the filter note. No filler, though the parenthetical field list makes it slightly dense.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool with fully documented params and annotations covering safety, most of what an agent needs is present. The gap is unspecified default scope (all connections/accounts when unfiltered) and the absence of pagination or volume guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both filter parameters, and the description only mirrors that with "Filtrable par connectionId / accountId". Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Liste") and resource ("positions ouvertes") and even enumerates the returned fields, so an agent can distinguish it from get_orders, get_trades, and get_orders_history. It lacks an explicit naming of a sibling alternative, but the resource differs enough from all siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Filtrable par connectionId / accountId" only indicates that filtering is possible; it does not say when to use this tool rather than get_orders or get_trades, nor does it state prerequisites or exclusions. Usage is at best weakly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_get_quoteCours d'un instrumentARead-only
Renvoie Bid / Ask / Last / volume et OHLC du jour pour un instrument donné (symbolId exact, ex. « EUR/USD »). La quote est mise en cache une seconde côté serveur MCP.
| Name | Required | Description | Default |
|---|---|---|---|
| symbolId | Yes | Identifiant de l'instrument (Symbol.Name). | |
| connectionId | No | Connexion à utiliser si l'instrument existe sur plusieurs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description is not required to establish safety. It goes beyond that by disclosing the one-second server-side MCP cache for quotes, which is a real behavioral trait an agent should know when polling. It omits failure behavior for unknown symbols.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: what is returned first, the caching caveat second. No filler and nothing buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly enumerates the returned fields (Bid/Ask/Last/volume/OHLC du jour), so an agent knows the payload shape. Only minor gaps remain, such as behavior on unknown symbols or multi-connection ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds the constraint that symbolId must be exact and supplies a concrete example ('EUR/USD'), reinforcing the 'Symbol.Name' format note in the schema. It says nothing extra about connectionId beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Renvoie) and resource (Bid/Ask/Last/volume + OHLC du jour) for a given instrument, which cleanly separates it from siblings like quantower_get_dom and quantower_get_history. An agent can tell what it returns without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'pour un instrument donné', but there is no explicit when-to-use guidance and no mention of alternatives such as get_dom for depth or get_history for past bars. Adequate but leaves routing decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_get_tradesExécutions (trades)ARead-only
Historique des exécutions depuis le login Quantower (Core.Trades) : tradeId, price, quantity, fee, orderId. Filtrable par connectionId / accountId, avec limit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre maximum d'exécutions renvoyées (défaut 100, max 1000). | |
| accountId | No | Filtre compte. | |
| connectionId | No | Filtre connexion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already declares this as a safe read, and the description usefully discloses the data source (Core.Trades) and the fact that connectionId/accountId act as optional filters. It says nothing about ordering, pagination, or what happens when no filter is supplied, so it adds moderate rather than rich behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the resource and the source of truth, then the returned fields, then the filters. No filler, though the parenthetical source reference is slightly technical overhead.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with complete schema coverage and readOnlyHint annotations, the description covers the essentials and even enumerates the return fields, which matters since there is no output schema. The absence of any note on ordering or pagination beyond limit is a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the default (100) and maximum (1000) for limit documented in the schema itself, so the schema carries parameter semantics. The description only restates that connectionId/accountId/limit are the filters, adding no syntax or interaction detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-resource pair (history of executions from the Quantower login / Core.Trades) and enumerates the returned fields (tradeId, price, quantity, fee, orderId). It is distinguishable from view tools like get_orders/get_positions by being about fills, though it never explicitly contrasts itself with the sibling quantower_get_orders_history.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes it is filterable by connectionId / accountId and supports a limit, which implies the usage context, but it gives no explicit when-to-use or when-not-to-use guidance relative to siblings such as quantower_get_orders or quantower_get_orders_history. Usage is left largely to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_list_accountsLister les comptes QuantowerARead-only
Liste les comptes Quantower (accountId, connectionId, balance, devise, PnL). Filtrable par connectionId. À utiliser uniquement avec des comptes démo pendant le développement.
| Name | Required | Description | Default |
|---|---|---|---|
| connectionId | No | Filtre sur une connexion (voir quantower_list_connections). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so safety is covered. The description adds value beyond that by enumerating the return fields (accountId, connectionId, balance, devise, PnL) in the absence of an output schema, plus the demo-only operating constraint. It omits any note on pagination or behavior when no accounts exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences that front-load the purpose, then filter, then constraint. No filler, though the parenthetical field list and the filter sentence partially duplicate information the schema already carries.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with no output schema, the description covers purpose, return fields, filtering, and the safety constraint. Only minor gaps remain, such as pagination or empty-result behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single connectionId parameter is already documented with a pointer to quantower_list_connections. The description's "Filtrable par connectionId" merely restates the schema, adding no syntax or format detail. Baseline 3 is correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Liste les comptes Quantower") and enumerates the returned fields, so an agent knows exactly what it gets back. It is broadly distinguishable from siblings like quantower_get_positions or quantower_list_connections, though it never explicitly says what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear usage constraint: use only with demo accounts during development. That is an explicit when-to-use boundary. It stops short of naming an alternative tool or explaining what to do for live accounts, so it is not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_list_connectionsLister les connexions QuantowerARead-only
Liste les connexions actives de Quantower (brokers / flux de données) avec leur connectionId. Le connectionId est requis ou utile pour la plupart des autres tools (multi-connexion, plan §1.1).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already covers the safety profile, so the bar is lower. The description adds that only ACTIVE connections are listed and that connectionId is the key output, which is useful context beyond annotations, but it says nothing about return format, pagination, or behavior when no connection is active.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with no filler; the purpose comes first and the usage note second. The trailing "(multi-connexion, plan §1.1)" is a slightly noisy internal reference but does not bloat the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-param lister with readOnly hints, the description carries enough: what it returns (connectionId) and why it matters. No output schema exists, so the brief mention of the returned connectionId is helpful, though the exact response shape and multi-connection ordering remain undocumented.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate on the input side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: "Liste les connexions actives de Quantower" and it clarifies the resource by naming it (brokers / flux de données). This cleanly distinguishes it from siblings like quantower_list_accounts and quantower_status without needing to name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent why and when to use it: the returned connectionId is "requis ou utile pour la plupart des autres tools," framing it as a prerequisite/discovery call in a multi-connection setup. No explicit when-not-to-use or named alternative, but the routing intent is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_search_symbolsRechercher des instrumentsARead-only
Recherche des instruments Quantower par texte (nom/code, insensible à la casse). Renvoie symbolId, connectionId, tickSize, lotStep, minLot/maxLot. Utilisez ensuite quantower_get_quote / quantower_get_history avec le symbolId exact.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Nombre maximum de résultats (défaut 50, max 500). | |
| query | Yes | Texte recherché, ex. « EUR », « BTC », « AAPL ». | |
| connectionId | No | Restreint la recherche à une connexion. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds real behavioral context beyond that: search is case-insensitive, and it enumerates the returned fields (symbolId, connectionId, tickSize, lotStep, minLot/maxLot) in the absence of an output schema. It omits result ordering/ranking, the only notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler: the search scope is front-loaded, then the return contract, then the hand-off instruction. Nothing redundantly restates the name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates well by listing the returned fields, and the downstream hand-off tells the agent where the symbolId goes. It leaves ranking/ordering and empty-result handling unexplained, which keeps it just short of fully complete for a search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so query, limit and connectionId are already documented in the schema with examples and bounds. The description repeats only the case-insensitivity of the query and adds no syntax or constraint detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Recherche des instruments Quantower par texte') plus the matching semantics (nom/code, case-insensitive), and it names the follow-up tools to use the result with. An agent can tell this is the symbol-discovery step rather than a quote/history call, even though no sibling overlaps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly positions the tool as the first step in a pipeline ('Utilisez ensuite quantower_get_quote / quantower_get_history avec le symbolId exact'), which tells the agent when to call it. It does not state any exclusions or what to do if the search returns nothing, so it falls short of fully explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quantower_statusÉtat du bridge QuantowerARead-only
Vérifie que le bridge QuantowerMcpBridge répond, renvoie la version de la plateforme, le mode du serveur MCP (read_only ou trading) et la liste des connexions actives. À appeler en premier pour diagnostiquer un problème de connexion.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=true. The description adds substantial context beyond that: it reports platform version, server mode (read_only or trading), and active connections — behaviors and return content not derivable from the annotation. It also hints at the diagnostic role first-call ordering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and result list, followed by the usage directive. Every clause earns its place; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With zero parameters and no output schema, the description fully describes what the tool returns (version, mode, connections) and when to call it. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so baseline is 4. The description correctly implies no input is required; no further parameter semantics are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Vérifie que... répond'), the resource (QuantowerMcpBridge), and enumerates the exact outputs: platform version, MCP server mode (read_only or trading), and active connections. This distinguishes it from siblings like quantower_list_connections, which lists a single resource, whereas this tool is a diagnostic bridge check.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'À appeler en premier pour diagnostiquer un problème de connexion' — telling the agent exactly when to use this tool (first, for connection troubleshooting). No alternatives are named, but for a diagnostic entry point that isn't needed.
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.
11 tool updates
v0.1.0- First observed
quantower_get_dom - First observed
quantower_get_history - First observed
quantower_get_orders - First observed
quantower_get_orders_history - First observed
quantower_get_positions - First observed
quantower_get_quote - First observed
quantower_get_trades - First observed
quantower_list_accounts - First observed
quantower_list_connections - First observed
quantower_search_symbols - First observed
quantower_status
TDQS
Scored across 11 tools
Each tool targets a distinct resource or action: status/diagnostics, connections, accounts, symbol search, quote, history, DOM, positions, orders, order history, and trades. The potentially overlapping get_orders vs get_orders_history vs get_trades are explicitly differentiated (working orders vs terminated orders vs executions).
A consistent quantower_ prefix plus verb_noun pattern (list_*, get_*, search_*) is used across almost all tools. quantower_status breaks the verb_noun pattern but is a minor, understandable deviation for a health-check tool.
11 tools is well-scoped for a trading-platform bridge, covering diagnostics, discovery, market data, and account/order state. Each tool earns its place with no obviously redundant entries.
The surface is read-only (status, list, get, search), yet the server advertises a 'trading' mode; there are no place_order, cancel_order, or modify_order tools. Core read workflows are covered, but the trading side of the stated domain is a notable gap.
Maintenance
Related MCP Connectors
Read-only access to your MetaTrader 4 and 5 accounts for AI agents: balances, open positions, trade history with win rate, live quotes, symbol specs and candles. It cannot place, modify or close orders.
- FensoryOAuthcom.fensory
Trading MCP server for AI agents, with live market data, account reads and controlled execution.
Free, read-only directory of 114 AI trading tools: broker MCP servers, market data APIs, bots and backtesters. Sourced facts on who can place orders and what safeguards exist; search, compare and check order gating for every broker MCP.
Unified financial infrastructure connecting AI agents directly to trade live/demo brokerage accounts, Web3 non-custodial wallets, real-time market data across equities, ETFs, crypto, forex, options, DeFi swaps, and prediction markets, institutional research feeds, and algorithmic strategy backtesters.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to control and read data from TradingView Desktop, including morning briefs, chart analysis, Pine Script development, and replay mode.45 npm-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to read and control TradingView Desktop charts in real time, supporting chart analysis, Pine Script development, alerts, replay practice, and multi-pane automation.45 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with TradingView Desktop via Chrome DevTools Protocol for chart analysis, Pine Script development, and workflow automation, all locally without external data transmission.45 npm1-
- FlicenseNot gradedqualityBmaintenanceEnables AI assistants to interact with local TradingView Desktop charts via Chrome DevTools Protocol for chart analysis, Pine Script development, and workflow automation. All data stays local, requiring a valid TradingView subscription.45 npm-