Serveur MCP AlgoVesta : laissez Claude, ChatGPT, Cursor et Gemini trader vos comptes d'exchange réels et MetaTrader 5
De quoi s'agit-il : AlgoVesta exploite un serveur Model Context Protocol (MCP) hébergé qui donne à un assistant IA vingt véritables outils de trading via un seul lien HTTPS. Collez ce lien unique dans Claude, ChatGPT, Cursor, Claude Code, Gemini CLI ou tout autre client compatible MCP, et l'assistant peut lire les soldes, ouvrir et fermer des positions, déplacer le stop-loss et le take-profit, et auditer ses propres actions sur 16 exchanges crypto et le forex MetaTrader 5 en même temps — en utilisant les paramètres de risque que vous avez déjà enregistrés dans AlgoVesta, derrière un mur de politique côté serveur qu'aucun prompt ne peut contourner. Chaque connexion démarre avec un solde fictif de 5 000 $ et chaque action renvoie un reçu signé en ed25519.
Le Model Context Protocol est une norme ouverte pour connecter des assistants IA à des systèmes externes. La plupart des serveurs MCP liés au trading diffusent des données de marché dans une fenêtre de discussion. Celui-ci exécute: c'est une couche de routage d'ordres dotée d'un moteur de risque déterministe en amont, et l'IA est l'appelant — jamais l'autorité.
Démarrage rapide
La configuration se fait en trois étapes et ne nécessite aucun code. L'ensemble du parcours se trouve dans l'onglet MCP Connection de votre panneau AlgoVesta.
Ouvrez l'onglet MCP Connection et générez une clé. Les nouvelles clés utilisent par défaut le paper scope. Le lien complet est affiché une seule fois — copiez-le à ce moment-là.
Collez le lien dans votre client IA en tant que serveur MCP personnalisé. Aucune clé API ne quitte AlgoVesta, aucun code, aucune installation locale.
Parlez-lui. “Comment va mon portefeuille ?” “Simule un long de 200 $ sur ETHUSDT à 5x.” “Ferme la moitié de ma position BTC.”
Votre URL de connexion ressemble à ceci :
https://api.algovesta.com/u/avmcp_<your-key>/mcp
Cette URL est un identifiant. Quiconque la détient peut agir, dans les limites de son scope, sur vos comptes. Traitez-la comme un mot de passe : ne la collez jamais dans un chat public, une capture d'écran, un dépôt partagé ou un ticket de support. En cas de fuite, révoquez-la depuis le panneau — la révocation prend effet immédiatement pour les nouvelles connexions et coupe les flux d'événements ouverts en quelques secondes.
Quels assistants IA peuvent se connecter
Tout client qui parle MCP via Streamable HTTP peut se connecter. Le tableau ci-dessous consigne ce qui a été vérifié sur le serveur en production, y compris les limitations réelles — certaines sont des contraintes du produit IA, pas d'AlgoVesta, et vous les rencontrerez quel que soit le serveur MCP utilisé.
| Client IA | Où coller le lien | Remarques et limites réelles |
|---|---|---|
| Claude (web, ordinateur, iOS, Android) | Paramètres → Connecteurs → Ajouter un connecteur personnalisé | Prise en charge complète. Les titres des outils et les boîtes de dialogue de confirmation proviennent directement du serveur. |
| Claude Code | claude mcp add --transport http | Ligne de commande. Utile pour des workflows scriptés ou reproductibles. |
| Cursor | mcp.json, le "url" champ | Prise en charge complète. Notez que le nom de la clé est url ici — Gemini CLI en utilise un différent. |
| ChatGPT | Mode développeur / connecteur personnalisé | Forfaits payants uniquement. Les connecteurs MCP personnalisés ne sont pas proposés sur le forfait gratuit, et le mode développeur doit parfois être activé au préalable. Il s'agit d'une restriction d'OpenAI. |
| Gemini CLI | ~/.gemini/settings.json, le "httpUrl" champ | CLI uniquement. L'application web Gemini ne prend pas en charge les serveurs MCP personnalisés. Utilisez la httpUrl clé, pas url. |
| Tout autre client compatible MCP | Ses propres paramètres MCP / connecteur | Le serveur implémente la norme, donc tout client prenant en charge le MCP distant via Streamable HTTP fonctionnera sans rien de spécifique. |
Exemple Cursor (mcp.json):
{
"mcpServers": {
"algovesta": {
"url": "https://api.algovesta.com/u/avmcp_<your-key>/mcp"
}
}
}
Exemple Gemini CLI (~/.gemini/settings.json) — notez httpUrl:
{
"mcpServers": {
"algovesta": {
"httpUrl": "https://api.algovesta.com/u/avmcp_<your-key>/mcp"
}
}
}
Claude Code :
claude mcp add --transport http algovesta https://api.algovesta.com/u/avmcp_<your-key>/mcp
Transport et protocole
| Transport | Streamable HTTP, sans état, réponses JSON. Chaque requête est authentifiée indépendamment. |
| Nom du serveur | AlgoVesta |
| Endpoint du lien secret | https://api.algovesta.com/u/<key>/mcp |
| Endpoint OAuth | https://api.algovesta.com/mcp |
| Changements de la liste d'outils | tools.listChanged = true. Les clients rafraîchissent la liste d'outils à la reconnexion, si bien que les nouveaux outils et paramètres apparaissent sans qu'il faille retirer puis rajouter le connecteur. |
| Flux d'événements | Événements envoyés par le serveur (SSE) à /mcp/events et /u/<key>/events, isolés par tenant, avec Last-Event-ID reconnexion. |
| Schéma exploitable par machine | /mcp/tools.json — le JSON Schema complet des 20 outils, exactement tel que le client le reçoit. |
Authentification et scopes
Il existe deux façons de se connecter, et les deux aboutissent au même contexte de tenant. Les outils n'acceptent jamais un identifiant utilisateur en paramètre — l'identité n'est lue qu'à partir de la connexion authentifiée, ce qui rend l'accès inter-comptes structurellement impossible et pas seulement interdit.
Lien secret
Une clé de la forme avmcp_<32-byte urlsafe random>, intégrée dans le chemin de l'URL. Elle est stockée sous forme de hachage Argon2id plus un hachage de recherche SHA-256 ; le texte en clair n'existe qu'au moment de la création et n'est jamais récupérable ensuite. Chaque clé possède son propre scope, son propre libellé et son propre état de révocation, de sorte que vous pouvez utiliser une clé paper dans Cursor et une clé live dans Claude, et couper l'une des deux indépendamment.
OAuth 2.1
Pour les clients qui préfèrent un véritable flux d'autorisation. Les grants pris en charge sont authorization_code et refresh_token, avec des refresh tokens à rotation. PKCE avec S256 est obligatoire — une requête sans cela est rejetée. L'enregistrement dynamique de client est disponible, si bien que la plupart des clients se configurent automatiquement. Documents de découverte :
GET https://api.algovesta.com/.well-known/oauth-authorization-server
GET https://api.algovesta.com/.well-known/oauth-protected-resource
POST https://api.algovesta.com/mcp/oauth/register
GET https://api.algovesta.com/mcp/oauth/authorize
POST https://api.algovesta.com/mcp/oauth/token
Les trois scopes
| Scope | Ce qu'elle permet de faire | Comment l'obtenir |
|---|---|---|
read | Portefeuille, prix, ordres en attente, simulations, aperçus de politique, vérification de reçu, replay de canal. Aucun ordre ne peut être passé. | Créée directement. |
paper | Tout ce qui est dans read, plus les ordres exécutés sur le moteur paper avec un solde virtuel de 5 000 $. La valeur par défaut pour les nouvelles clés. | Créée directement. |
live | Tout ce qui précède, plus des ordres réels sur vos exchanges connectés et vos comptes MetaTrader 5. | Second facteur requis. Un code d'authentification (TOTP) valide, ou un code de confirmation envoyé à l'e-mail de votre compte et valable 10 minutes. Appliqué côté serveur, sans exception. |
Les scopes sont hiérarchisés, de sorte qu'un outil nécessitant paper refuse une read clé avec insufficient_scope. La frontière entre argent simulé et argent réel est donc une propriété de la clé elle-même, pas d'un prompt, d'un paramètre ou de l’appréciation du modèle.
Référence des outils — les 20 outils
Ce sont exactement les outils que voit votre assistant. Les outils de lecture peuvent être appelés sans risque sans vous demander d'abord ; les six outils d'écriture déclenchent une confirmation dans les clients qui la prennent en charge, et trois d'entre eux — place_order, close_position et cancel_order — sont en outre marqués comme destructifs dans leurs annotations.
| Outil | Scope | Type | Objectif |
|---|---|---|---|
get_portfolio_context | read | lecture seule | Tous les comptes connectés en un seul appel |
get_market_price | read | lecture seule | Prix en direct avec fraîcheur indiquée |
simulate_order | read | lecture seule | Simulation (dry-run) incluant le verdict de politique |
place_order | paper / live | destructif | Ouvre une position |
close_position | paper / live | destructif | Ferme totalement ou partiellement |
modify_position | paper / live | écriture | Déplace le stop-loss et le take-profit |
list_open_orders | read | lecture seule | Ordres limite en attente |
cancel_order | paper / live | destructif | Annule un ordre en attente |
compile_policy | read | lecture seule | Transforme des règles en langage naturel en un aperçu de politique |
verify_receipt | read | lecture seule | Vérifie la signature et la chaîne de hachage |
replay_channel | read | lecture seule | Back-teste un canal Telegram par rapport à vos règles |
get_trade_history | read | lecture seule | Trades clôturés et performance sur crypto, MT5 et paper |
compare_venues | read | lecture seule | Classe les exchanges connectés selon le prix et le spread mesurés |
list_strategies | read | lecture seule | Stratégies TradingView ; l'URL du webhook n'est jamais renvoyée |
create_strategy | paper / live | écriture | Nouvelle stratégie, toujours avec l'exécution en argent réel désactivée |
update_strategy | paper / live | écriture | Réglages de stratégie ; auto_trade est refusé |
backtest_my_signals | read | read-only | Rejoue vos propres signaux passés avec d'autres réglages (tâche en file) |
simulate_policy | read | read-only | Applique une politique de risque aux trades que vous avez réellement clôturés (tâche en file) |
import_tradingview_backtest | read | read-only | Recalcule un export TradingView avec frais et slippage réels (tâche en file) |
get_job_status | read | read-only | Avancement et résultat d'une tâche en file |
get_portfolio_context
Ne prend aucun paramètre. Renvoie une vue normalisée de chaque compte d'exchange, de chaque compte MetaTrader 5 et du compte paper appartenant à la clé authentifiée — et rien d'autre. C'est l'appel qui fait de “comment ça se passe ?” une seule question au lieu de seize.
Deux champs comptent plus que les autres. Pour les comptes crypto, balance et equity décrivent le portefeuille futures uniquement ; l'argent spot est indiqué séparément dans spot_balance, de sorte qu'un assistant qui ne lit que balance peut conclure à tort que vous n'avez rien. Pour les comptes MetaTrader 5, positions_source vaut soit live_ea, ce qui signifie que la liste des positions a été vérifiée par rapport au terminal, soit unavailable, ce qui signifie que le terminal n'a pas pu être joint. Dans le unavailable cas, une liste de positions vide ne signifie pas “aucune position ouverte” — cela signifie inconnu, et la description de l'outil indique au modèle de le dire plutôt que de vous rassurer.
get_market_price
Paramètres : venue, symbol. Renvoie {ok, venue, symbol, last, bid, ask, ts, source, age_sec}. Les prix proviennent d'un cache partagé rafraîchi environ chaque seconde ; en cas d'absence, le serveur effectue un appel REST en direct vers l'exchange. Si la valeur a plus de 10 secondes ou ne peut pas être récupérée du tout, cela est indiqué explicitement — un prix obsolète n'est jamais présenté comme un prix en direct. Si le symbole n'existe sur aucun exchange connecté, un prix DEX informatif peut être renvoyé accompagné d'un avertissement clair indiquant que vous ne pouvez pas le trader sur vos venues connectées.
simulate_order
Requis : venue, symbol, side, order_type, idempotency_key. N'envoie aucun ordre. Renvoie le fill attendu, l'impact sur la marge et le verdict de politique, plus les prix absolus de stop-loss et de take-profit calculés par le serveur. C'est une opération de lecture, donc un assistant bien conçu l'appelle sans demander la permission, vous montre un résumé unique, et demande exactement une confirmation avant de passer quoi que ce soit.
place_order
Requis : venue, symbol, side, order_type, idempotency_key. Facultatif : account, market, size_usd, margin_usd, risk_pct, lots, leverage, sl, tp, sl_pct, tp_pct, take_profits, entry_price.
L' idempotency_key n'est pas de la décoration. Si la même clé arrive deux fois pour le même utilisateur, la réponse stockée est rejouée et aucun second ordre n'est ouvert — c'est ce qui vous protège quand un client réessaie après un timeout, qu'un téléphone perd le signal en pleine confirmation, ou qu'un modèle appelle un outil deux fois.
Le dimensionnement est explicite, volontairement. Pour le crypto, vous transmettez exactement un des trois champs, et ils signifient des choses différentes :
| Champ | Signification | Exemple à 5x |
|---|---|---|
size_usd | Valeur de la position (notionnel) | size_usd=100 → une position de 100 $, 20 $ de votre argent |
margin_usd | Collatéral sorti de votre propre poche | margin_usd=20 → une position de 100 $ |
risk_pct | Pourcentage du solde libre utilisé comme marge. Ce n'est pas un dimensionnement du risque basé sur la distance du stop ; la distance du stop-loss n'entre pas dans le calcul. | risk_pct=1 sur un solde de 2 000 $ → 20 $ de marge → une position de 100 $ |
Pour le forex et MetaTrader 5, la taille est indiquée en lots à la place, et leverage n'est pas envoyé du tout — le produit n'est pas assorti d'effet de levier et le dimensionnement provient du volume en lots. La taille de lot que vous indiquez est utilisée exactement et n'est jamais arrondie à une valeur pratique ; si elle sort des limites de votre broker, l’ordre est refusé et la plage autorisée est renvoyée.
Tolérance sur la taille de l'ordre. Les exchanges n'acceptent que certains incréments de lot, donc le montant demandé est ajusté au pas valide le plus proche. Si l'écart reste dans les 20 %, l'ordre se poursuit et l'écart exact vous est communiqué ; au-delà de 20 %, l'ordre n'est pas ouvert et on vous indique, en chiffres, quels montants proches fonctionneraient. Ce seuil a été choisi en rejouant chaque ordre réel jamais passé via la fonction de dimensionnement, et non par intuition.
Les champs omis reviennent à vos paramètres enregistrés. Si vous n'indiquez pas de stop-loss, de take-profit ou d'effet de levier, l'assistant reçoit pour instruction de laisser ces champs vides, et le serveur les remplit à partir des préférences enregistrées dans votre panneau — les mêmes valeurs que celles utilisées par le panneau manuel et le bot Telegram. La réponse indique quels champs proviennent des paramètres enregistrés dans prefs_used. Cela existe à cause d'un échec mesuré : lorsque ces champs étaient obligatoires, le modèle devait inventer des valeurs, et cinq ordres sur cinq écrasaient la propre configuration de l’utilisateur.
close_position
Requis : venue, symbol, side, idempotency_key. Facultatif : fraction (0 à 1], account, ticket. Fonctionne pour le crypto et pour MetaTrader 5. La fermeture réduit le risque, donc le mur de politique ne la bloque jamais — seul le kill switch le fait. Dix appels avec la même clé d'idempotence effectuent exactement une seule fermeture. S'il n'existe aucune position correspondante, vous obtenez POSITION_NOT_FOUND ainsi que les positions qui sont ouvertes sur cette venue, afin que l'assistant puisse se corriger au lieu de deviner.
MetaTrader 5 n'a pas de fermeture partielle — l'Expert Advisor ferme entièrement — utilisez donc fraction=1 là-bas. Lorsque plusieurs positions MT5 sont ouvertes sur le même symbole, ticket devient obligatoire, et tant que la cible est ambiguë, rien n'est fermé..
modify_position
Requis : venue, symbol, side, idempotency_key, plus au moins un de new_sl / new_tp. . Le stop-loss ne peut pas être supprimé — la règle du SL obligatoire s'applique ici aussi. L'ordre est validé : un long nécessite new_sl < mark < new_tp, un short l'inverse. N'envoyer qu'un seul côté laisse l'autre à sa valeur actuelle plutôt que de le supprimer. Comme pour la fermeture, un ticket MT5 ambigu signifie que rien n'est modifié.
list_open_orders
Facultatif : venue. Liste les ordres limite en attente avec order_ref, venue, symbole, sens, prix d'entrée, taille et date de création.
Un point à connaître avant de demander à un assistant d'examiner vos ordres ouverts : les ordres en attente que cet outil suit se trouvent dans le carnet d'ordres simulé (paper). Les ordres placés sur une plateforme réelle via MCP sont envoyés en tant qu'ordres au marché, donc ils s'exécutent immédiatement au lieu de rester en attente, et une liste vide sur un compte réel signifie qu'il n'y a rien en attente, et non que quelque chose a disparu.
cancel_order
Requis : venue, order_ref, idempotency_key. Si la référence ne vous appartient pas, la réponse est NOT_FOUND — jamais un indice que l’ordre de quelqu'un d'autre existe. Comme la fermeture, c'est une action qui réduit le risque, et le mur de politique ne la bloque pas.
compile_policy
Requis : natural_text. Vous écrivez une règle en langage naturel — “ne jamais risquer plus de 2 % sur un trade, pas de levier au-delà de 10, uniquement BTC et ETH” — et elle est compilée en une politique JSON, renvoyée comme un aperçu. La compilation n'active jamais rien. L'activation est une étape distincte et délibérée, depuis le panneau ou via POST /api/mcp/policies/{policy_id}/activate, ce qui signifie qu'un modèle ne peut pas assouplir vos règles simplement en en parlant.
verify_receipt
Requis : receipt_id. Renvoie signature_valid et chain_valid ; une action n'est vérifiée que lorsque les deux sont vrais. Les reçus sont signés en ed25519 et chaînés par hachage par utilisateur, de sorte que modifier un reçu antérieur casse tous les suivants et chain_valid devient false. La clé publique est servie à /mcp/receipts/pubkey, afin que vous puissiez vérifier indépendamment sans avoir à faire confiance à cet endpoint. Les anciens reçus de l'ère HMAC renvoient legacy=true.
replay_channel
Requis : channel_ref. Facultatif : days (jusqu'à 90, 30 par défaut), policy_override. Répond à “et si j'avais suivi ce canal Telegram ces X derniers jours selon mes règles ?” en rejouant ses signaux passés en mode paper, chaque signal passant par le mur de politique afin que les signaux rejetés ne s'ouvrent jamais. La progression arrive sous forme d' replay_progress événements. Les résultats sont mis en cache pendant 24 heures et l'outil est limité à 5 replays par heure. Sortie : {trades:[...], summary:{total_pnl, win_rate, max_drawdown, avg_rr, policy_rejections}}.
get_trade_history
Facultatif : venue, symbol, days (1–365, 30 par défaut), limit (1–200, 50 par défaut), market (crypto / forex / paper). Renvoie les trades clôturés des trois sources en une seule liste, du plus récent au plus ancien, plus un summary. Le résumé est délibérément prudent : avg_rr n'est calculé qu'à partir des trades où l'entrée, le stop-loss et la sortie sont tous connus, et rr_sample indique combien c'était ; total_pnl vaut null lorsque plusieurs devises de compte sont mélangées, pnl_by_currency étant fourni à la place ; la commission n'est enregistrée nulle part, donc fee reste null et le PnL crypto est brut. Si une source ne peut pas être lue, incomplete_sources la nomme au lieu de renvoyer une liste courte comme si elle était complète.
compare_venues
Requis : symbol. Facultatif : market (futures par défaut, ou spot), side. Renvoie, pour chaque exchange crypto connecté, le prix en direct et — sur les places qui publient le bid/ask — le spread en points de base, plus l'écart de prix entre les places. Il ne choisit pas de place : votre ordre en désigne toujours une. Les frais de trading, la profondeur du carnet d'ordres et le slippage sont listés sous basis.not_measured et ne sont jamais estimés, et une place qui n'a pas publié de bid/ask apparaît dans not_comparable_on_spread au lieu d'être classée comme si son spread était nul. cheapest_measured signifie donc “spread mesuré le plus bas”, pas “le moins cher au global”.
list_strategies
Aucun paramètre. Renvoie vos stratégies TradingView avec leurs réglages, plan_limit et can_create_more. auto_trade est indiqué pour chaque stratégie afin que l'assistant puisse vous dire lesquelles sont en argent réel. L'URL du webhook, l'URL de démo et le secret HMAC sont retirés de la réponse — seuls webhook_url_configured et has_hmac_secret sont exposés, car l'URL elle-même est un identifiant sensible.
create_strategy
Facultatif : name. Requis : idempotency_key. Crée une stratégie TradingView avec auto_trade désactivé ; ce champ n'est pas modifiable via MCP, donc une stratégie nouvellement créée ne peut pas passer d'ordres réels tant que vous ne l'activez pas vous-même dans le panneau. Soumis au quota de stratégies de votre forfait — au-delà de la limite, il renvoie une erreur codée de limite de forfait plutôt que de ne rien faire silencieusement.
update_strategy
Requis : strategy_id, changes, idempotency_key. Modifie le levier (limité entre 1–20), le pourcentage de risque (0.1–50), les pourcentages de stop-loss et de take-profit, les réglages de trailing et de break-even, les symboles autorisés, le compte cible et si la stratégie accepte les signaux. auto_trade, status et ip_allowlist sont refusés et renvoyés dans refused_fields ; la suppression se fait uniquement depuis le panneau. Activer reverse_enabled renvoie un warning, car à partir de là un signal BUY ouvre un SHORT.
backtest_my_signals
Facultatif : days (1–90), source, symbols, margin_usd, leverage, sl_pct, tp_pct, max_hold_minutes, taker_fee_bps, partial_tp. Rejoue les signaux que vous avez réellement reçus sur de vraies bougies d'une minute du mainnet, deux fois : une fois avec le stop, le take-profit et le levier d'origine de chaque signal, une fois avec vos réglages. Renvoie immédiatement un job_ref ; le résultat se récupère avec get_job_status. Chaque résultat porte coverage (combien de signaux ont pu être simulés et pourquoi pas les autres) et assumptions (frais, slippage, TP partiel et ce qui n'est pas modélisé). Les signaux sans stop, avec un stop du mauvais côté de l'entrée ou sans données historiques sont comptés et ignorés, jamais devinés.
simulate_policy
Facultatif : policy_text (langage courant), rules (déjà compilées), days (1–365). Applique une politique de risque aux trades que vous avez réellement clôturés et indique lesquels elle aurait rejetés, par quelle règle, et l'écart de PnL. Renvoie un job_ref. Deux limites figurent dans chaque résultat : les règles qui dépendent de l'état du compte au moment de l'ordre (positions ouvertes, perte du jour, solde) sont évaluées à zéro car cet état ne peut pas être reconstruit à partir de trades clôturés — elles sont donc SOUS-comptées, jamais surcomptées ; et le PnL provient de vos résultats réalisés, il est indiqué par devise et jamais additionné entre devises.
import_tradingview_backtest
Obligatoire : csv_text. Facultatif : taker_fee_bps, slippage_bps, leverage. Prend le CSV exporté depuis le Strategy Tester de TradingView (List of Trades) et le recalcule avec de vrais coûts : frais taker et slippage mesuré à l'entrée comme à la sortie. Pine Script n'est jamais exécuté ni interprété — seule votre liste de trades exportée est recalculée — et les prix restent exactement ceux rapportés par TradingView. Les lignes sans colonne de quantité ne peuvent pas porter de frais : elles restent optimistes et leur nombre est indiqué. Renvoie un job_ref.
get_job_status
Facultatif : job_ref. Avec une référence, renvoie l'état de la tâche et, une fois terminée, son résultat ; sans argument, liste vos tâches récentes. status vaut PENDING, RUNNING (avec un pourcentage dans progress), DONE, FAILED (une nouvelle tentative est planifiée), DEAD ou CANCELLED. Les tâches s'exécutent une par une : queue_position indique combien passent avant la vôtre. Une référence qui ne vous appartient pas reçoit la MÊME réponse “introuvable” qu'une référence inexistante, ce qui empêche de les énumérer.
Les résultats ne sont pas conservés indéfiniment, et il vaut mieux connaître ces limites avant de s'appuyer dessus. Seules les 20 tâches terminées les plus récentes conservent leur résultat complet ; les plus anciennes sont réduites à leur résumé et renvoient result_pruned: true, ce qui signifie que les lignes détaillées ont disparu et que la tâche doit être relancée pour les régénérer. Tout est supprimé après 30 jours. Les exécutions de backtest et de politique sont également enregistrées dans l'historique de backtest de votre compte, et le résultat porte le run_id sous lequel elles ont été stockées.
Le mur de politique
C'est la partie qui rend défendable le fait de confier des outils à un modèle de langage. Vos règles sont compilées une fois en JSON, validées par rapport à un schéma fixe, puis évaluées côté serveur et de manière déterministe sur chaque ordre. Le modèle ne les évalue jamais, ne voit jamais de moyen de les contourner, et ne peut pas être convaincu de les assouplir — ni par vous dans un moment d'impatience, ni par un prompt injecté via une page web ou un message Telegram qu'il aurait lu. Une violation est un rejet strict avec une entrée d'audit.
| Règle | Type | Signification |
|---|---|---|
max_risk_per_trade_pct | nombre, 0–100 | Plafond sur la part qu’un seul trade représente dans le compte |
max_order_size_usd | nombre > 0 | Plafond absolu sur la valeur de l'ordre |
max_daily_loss_usd | nombre > 0 | Arrête de trader pour la journée au-delà de cette perte |
max_open_positions | entier | Limite de concurrence |
leverage_cap | nombre, 1–1000 | Votre propre plafond de levier |
venue_scope | tableau | Restreint l'IA à des venues nommées |
symbol_whitelist | tableau | Seuls ces symboles peuvent être tradés |
symbol_blacklist | tableau | Ces symboles ne sont jamais tradés |
allowed_sides | tableau | Long uniquement, short uniquement, ou les deux |
notes | chaîne | Votre propre annotation |
Une politique compilée qui échoue à la validation du schéma ne peut pas être activée du tout. Il n'existe pas de politique partiellement valide.
Modèle de sécurité
| Paper par défaut | Chaque nouvelle clé démarre en paper scope avec un solde virtuel de 5 000 $. Atteindre de l'argent réel est un acte explicite et distinct. |
| Le stop-loss est obligatoire | Si ni un stop-loss explicite ni une valeur par défaut enregistrée n'existent, l'ordre est refusé. Il ne peut pas non plus être supprimé par la suite. |
| Idempotence | Chaque outil d'écriture nécessite une clé générée par le client d'au moins 8 caractères. Les répétitions rejouent la réponse stockée au lieu d'agir deux fois. |
| Kill switch | POST /api/mcp/freeze arrête tout d'un coup ; chaque outil renvoie alors user_frozen. /unfreeze l'annule. |
| Révocation par clé | Révoquez un client sans toucher aux autres. Les flux d'événements ouverts se coupent en quelques secondes. |
| Reçus signés | signature ed25519 plus une chaîne de hachage par utilisateur sur chaque action, vérifiable par rapport à une clé publique. |
| Journal d'audit | Chaque appel est enregistré avec le nom de l'outil, les arguments, le résultat et la latence, consultable à GET /api/mcp/audit et dans le panneau. |
| Isolation par tenant | Les outils ne peuvent pas accepter d'identifiant utilisateur ; l'identité provient uniquement de la connexion authentifiée. |
| Clés trade uniquement | Vos clés API d'exchange sont créées sans permission de retrait et stockées chiffrées en AES-256. Les ordres partent depuis des IP de trading AlgoVesta fixes que vous autorisez sur l'exchange. |
Sur l'effet de levier, clairement : AlgoVesta n'impose pas de plafond de levier sur votre propre compte — c'est votre exchange qui le fait, et vous pouvez fixer votre propre plafond avec la règle leverage_cap de politique. Le forex via MetaTrader 5 n'est pas assorti d'effet de levier sur ce chemin et est dimensionné en lots. Quiconque vous dit qu'une plateforme “plafonne le levier à 20x” ici décrit quelque chose qui n'existe pas.
Erreurs
| Code | HTTP | Quand cela se produit |
|---|---|---|
unauthorized | 401 | Clé manquante, invalide ou révoquée |
insufficient_scope | 401 | L'outil nécessite un scope supérieur à celui que possède la clé |
forbidden | 403 | Non autorisé pour ce compte |
user_frozen | 403 | Le kill switch est actif |
policy_violation | 403 | Une règle a rejeté l'ordre ; la réponse indique laquelle |
idempotency_conflict | 409 | La même clé a été réutilisée avec des arguments différents |
validation_failed | 422 | Arguments malformés ou contradictoires |
rate_limited | 429 | Trop d'appels ; retry_after est inclus |
Les refus au niveau métier arrivent sous forme de résultats structurés plutôt que d'erreurs de transport, de sorte que l'assistant peut agir en conséquence : VENUE_NOT_CONNECTED, ACCOUNT_REQUIRED, ACCOUNT_AMBIGUOUS, ACCOUNT_NOT_FOUND, POSITION_NOT_FOUND, MISSING_FIELDS, INVALID_SIDE, SL_REMOVAL_FORBIDDEN. Les messages d'erreur ne divulguent jamais de détail interne, et ne révèlent jamais rien sur un autre compte.
Limites de débit
| Portée de la limite | Limite |
|---|---|
| Tous les appels d'outils, par clé | 60 par minute |
place_order | 10 par minute |
replay_channel | 5 par heure (résultats mis en cache 24 heures) |
| E-mail de confirmation du scope live | 1 par minute |
Événements live
Un flux d'événements envoyés par le serveur, isolé par tenant, est disponible à /mcp/events (OAuth) et /u/<key>/events (lien secret), avec Last-Event-ID de reconnexion, de sorte qu'une connexion coupée reprend au lieu de redémarrer. Types d'événements : fill, policy_rejected, position_closed, sl_hit, tp_hit, et replay_progress pendant un replay de canal.
Venues — 16 exchanges et MetaTrader 5
Une seule connexion les atteint tous. Une venue ne devient disponible pour l'IA qu'après que vous l'avez connectée dans AlgoVesta ; demander une venue que vous n'avez pas connectée renvoie VENUE_NOT_CONNECTED plutôt qu'une supposition.
| Exchange | venue valeur |
Marchés | Passphrase nécessaire |
|---|---|---|---|
| Binance | binance | Spot, futures | Non |
| Bybit | bybit | Spot, futures | Non |
| OKX | okx | Spot, futures | Oui |
| KuCoin | kucoin | Spot, futures | Oui |
| Gate.io | gateio | Spot, futures | Non |
| Bitget | bitget | Spot, futures | Oui |
| Kraken | kraken | Spot, futures | Non |
| Coinbase | coinbase | Spot | Non |
| BingX | bingx | Spot, futures | Non |
| Hyperliquid | hyperliquid | Futures | Non |
| Backpack | backpack | Spot, futures | Non |
| HTX | htx | Spot, futures | Non |
| BloFin | blofin | Spot, futures | Oui |
| Phemex | phemex | Spot, futures | Non |
| WOO X | woo | Spot, futures | Oui (Application ID) |
| CoinEx | coinex | Spot, futures | Non |
| MetaTrader 5 (forex, métaux, indices) | mt5 | Lots, chemin sans effet de levier | Identifiants du broker |
| Moteur paper | paper | 5 000 $ virtuels | — |
Six d'entre eux — Binance, Bybit, OKX, Gate.io, KuCoin et Bitget — ont été vérifiés de bout en bout avec de l'argent réel, à la fois en futures et en spot, avec confirmation que le stop-loss et le take-profit existent bien sur l'exchange lui-même et correspondent exactement aux valeurs enregistrées. Chaque exchange a ses propres particularités, et les différences sont délibérées plutôt que des lacunes : Bybit et Bitget n'acceptent pas une seconde jambe de take-profit en spot, OKX spot est acheminé via l'API brute pour empêcher un compte cash de devenir silencieusement un compte sur marge, Binance spot impose un notionnel minimum avant l'achat, et les achats au marché sur KuCoin sont passés en mode cost.
Le spot et les futures sont toujours tenus séparés. Le même symbole sur les deux marchés correspond à une ligne distincte, un flux de prix distinct et une clé distincte — l'un ne se mélange jamais avec l'autre.
MetaTrader 5 sans aucune installation
Vous n'installez rien pour le forex. Il n'y a pas de VPS à louer, pas de terminal MetaTrader à maintenir actif sur votre propre machine, pas d'Expert Advisor à attacher et pas de compte de pont tiers à acheter. AlgoVesta exécute les terminaux MetaTrader 5 sur ses propres serveurs gérés et les maintient connectés à votre broker en permanence. Vous saisissez vos identifiants de compte une seule fois et votre assistant IA peut ensuite trader ce compte. Les données de position renvoyées à l'assistant sont vérifiées par rapport au terminal, et lorsqu'elles ne peuvent pas être vérifiées, l'outil le dit au lieu de laisser entendre un compte vide.
Feuille de route — actions mondiales
Le trading d'actions mondiales via Interactive Brokers (IBKR) est prévu, avec pour objectif 170 actions mondiales accessibles depuis la même connexion MCP que le crypto et le forex. Il s'agit d'un élément de la feuille de route et ce n'est pas encore en production aujourd'hui ; rien sur cette page à part ce paragraphe ne le décrit, et aucun outil actuel ne peut trader des actions. À son lancement, cela apparaîtra comme des valeurs venue supplémentaires sous les mêmes outils, le même mur de politique et les mêmes reçus.
Latence mesurée
Ce sont des mesures, pas des chiffres marketing.
| Étape | Mesuré |
|---|---|
| Réception et analyse de la requête | 17–67 ms (médiane 38 ms) |
| De bout en bout sur MetaTrader 5 | Environ 1 seconde (849 ms mesurées ; 702 ms pour fermer) |
| De bout en bout sur un exchange crypto | Environ 3 secondes (2 785 ms mesurées) |
| Moteur paper | Médiane 318 ms — aucun aller-retour vers l'exchange |
Le temps passé dans votre client IA — le modèle qui réfléchit, et vous qui confirmez — n'est pas inclus et dominera généralement. Ce serveur n'est pas une venue d'exécution à faible latence et n'est pas vendu comme tel.
Endpoints REST du panneau
Tout ce que l'IA ne peut pas et ne doit pas faire elle-même se trouve derrière votre session connectée normale.
POST /api/mcp/keys create a key (live requires 2FA)
GET /api/mcp/keys list keys
DELETE /api/mcp/keys/{key_id} revoke a key
POST /api/mcp/live-code send the live-scope confirmation code
POST /api/mcp/freeze | /api/mcp/unfreeze kill switch
GET /api/mcp/status connection status
GET /api/mcp/policies list policies
POST /api/mcp/policies/compile compile without activating
POST /api/mcp/policies/{id}/activate activate
POST /api/mcp/policies/{id}/deactivate deactivate
GET /api/mcp/audit audit log
GET /api/mcp/receipts receipts
GET /api/mcp/receipts/{receipt_id}/verify verify one receipt
GET /api/mcp/pubkey receipt public key
GET /api/mcp/paper | POST /api/mcp/paper/reset
Ce dont vous avez besoin
La connexion MCP elle-même fait partie du produit et n'est pas vendue séparément. Ce qui vous limite en pratique, c'est ce que l'IA est censée atteindre : le trading paper ne nécessite qu'un compte, tandis que le trading live nécessite un forfait payant actif et les comptes connectés que ce forfait autorise — et le trading live MetaTrader 5 avec de l'argent réel nécessite en plus que vous y consentiez explicitement pour ce compte. Les limites de forfait sur le nombre de clés d'exchange et de comptes MetaTrader sont indiquées sur la page de tarification. Vous pouvez tout essayer sur le solde paper de 5 000 $ avant que rien de tout cela ne compte.
Questions fréquentes
live scope, et ce scope n'est délivré qu'après un second facteur. Jusque-là, le même assistant fonctionne sur un solde paper de 5 000 $ avec des outils identiques, ce qui vous permet de répéter tout le workflow avant que le moindre argent réel ne soit accessible.get_portfolio_context les renvoie tous en un seul appel. Lorsque vous détenez plusieurs comptes sur le même marché, le account paramètre devient obligatoire et une requête ambiguë est refusée plutôt qu'envoyée à un compte par défaut.POST /api/mcp/freeze. Chaque outil renvoie alors user_frozen jusqu'à ce que vous dégeliez. Pour couper un seul client à la place, révoquez simplement cette clé — les autres continuent de fonctionner.verify_receipt outil, ou indépendamment par rapport à la clé publique à /mcp/receipts/pubkey. Modifier un ancien reçu casse la chaîne pour tous les reçus suivants, ce qui est exactement ce qui rend toute falsification détectable.Connectez un assistant IA à vos comptes
Commencez avec le solde paper de 5 000 $. Pas de carte, rien à installer, et la frontière du live reste fermée jusqu'à ce que vous l'ouvriez délibérément.
Créer un compte gratuit Voir la présentationVoir aussi : MCP pour assistants IA · Serveur MCP Trading : Claude & ChatGPT vers 16 Bourses + MT5 · exchanges pris en charge · forex MetaTrader 5 · automatisation TradingView · ce qu'est un serveur de trading MCP · sécurité · tarification.
Le trading comporte des risques. L'automatisation ne les supprime pas, et un assistant IA ne constitue pas un conseil en investissement. Commencez en paper.