MCP Autopilot
Trackily expose 181 tools MCP (Model Context Protocol) qui te permettent de piloter tout l'instance depuis Claude Desktop, Cursor, Zed, ChatGPT Desktop ou n'importe quel agent custom. Ce n'est pas une "intégration AI" superficielle — c'est l'API réelle du produit, exposée via un protocole standardisé que tous les clients LLM modernes savent parler.

Qu'est-ce que MCP ?
Model Context Protocol est un standard ouvert, publié par Anthropic, qui décrit comment un client LLM (Claude Desktop, Cursor…) découvre et appelle des "tools", "resources", et "prompts" exposés par un serveur tiers. C'est en quelque sorte le "USB-C des IAs" : un seul protocole, beaucoup d'apps des deux côtés.
Côté serveur, MCP est un wrapper JSON-RPC 2.0 sur HTTP (transport "streamable HTTP") ou stdio. Trackily implémente le transport HTTP, monté sur /mcp.
Côté client, le LLM se connecte au serveur, fait un handshake initialize, liste les tools/resources/prompts disponibles, et peut ensuite les appeler pendant une conversation. Le LLM n'a pas besoin de connaître l'API REST de Trackily — il lit les description + inputSchema de chaque tool et appelle ce qui semble pertinent.
Spec : https://modelcontextprotocol.io/specification.
Pourquoi 181 tools
Trackily, c'est une application dense : campaigns, offers, landings, flows, sources, automizer, native commerce, e-commerce externe (Shopify), email marketing, cloaking, AI landings, analytics, settings… Chaque domaine a typiquement 5-15 tools (list / get / create / update / delete + opérations spécialisées).
Le découpage est volontairement fin plutôt que générique : au lieu d'un seul tool trackily_call(method, params), on a list_campaigns, pause_campaign, duplicate_campaign, update_campaign_cost. Cela permet au LLM de proposer des actions précises sans avoir à composer manuellement des payloads compliqués, et permet le scoping fin (cf. Scopes).
Distribution des 181 tools par module :
| Module | Tools | Rôle |
|---|---|---|
autopilot-resources.js |
12 | reads core (campaigns/offers/landings/flows + global search) |
autopilot-actions.js |
17 | writes core (pause, resume, create, duplicate, update) |
autopilot-source-actions.js |
6 | gestion campagnes côté ad networks (Kadam, Meta, TikTok) |
autopilot-meta-tools.js |
6 | tools de synthèse / orchestration (briefing, anomalies, scale plan) |
autopilot-content-tools.js |
11 | landings (AI generate, translate, compliance, import) |
autopilot-workflow-tools.js |
8 | cloaking workflows visuels |
autopilot-ecommerce-tools.js |
10 | stores Shopify + products |
autopilot-ecommerce-orders-tools.js |
14 | orders Shopify (fulfill, refund, tags) |
autopilot-ecommerce-marketing-tools.js |
17 | collections, discount codes, script tags, webhooks Shopify |
autopilot-ecommerce-content-tools.js |
15 | pages CMS, articles, metafields, SEO audit |
autopilot-ecommerce-analytics-tools.js |
13 | analytics Shopify (revenue, conversion, customers) |
autopilot-ecommerce-orchestration-tools.js |
8 | briefings + bulk updates Shopify |
autopilot-native-commerce-tools.js |
11 | native products + shipping zones |
autopilot-native-orders-tools.js |
7 | orders natives (Trackily commerce) |
autopilot-email-tools.js |
26 | email marketing (lists, sequences, SMTP, suppression, triggers) |
Total : 181 tools. Tous référencés dans la tools reference.
Qui utilise ça ?
La règle : le jeton dans env, jamais dans args
Tout ce qu'un client MCP met dans args devient un argument de processus : ps, le moniteur d'activité, un outil de supervision, les journaux du client (Claude Desktop garde dans ~/Library/Logs/Claude/ ce que le pont écrit au démarrage — les en-têtes en clair avec d'anciens mcp-remote) et parfois l'historique du shell le lisent en clair. Le jeton Trackily va donc dans le bloc env ; args ne porte que la référence Authorization:${AUTH_HEADER}, que le pont mcp-remote remplace lui-même par la variable au démarrage.
Tu n'as rien à écrire à la main : Autopilot → Tokens → New token (ou Rotate) affiche la configuration complète, jeton déjà placé dans env, avec un bouton Copy. L'onglet Docs montre la même chose avec <YOUR_TOKEN> à remplacer.
Avant (jusqu'au 2026-09-25) : l'écran faisait copier une commande
npx … setup --token <jeton>d'un paquet qui n'a jamais été publié (la commande échouait), et cette doc montrait le jeton dansargsou dans l'URL. Si ta configuration actuelle a le jeton dansargsou dans l'URL (?token=, encore accepté mais déconseillé), refais-la depuis l'écran, puis fais tourner le jeton (Rotate) : l'ancien a pu être lu par tout ce qui voit la liste des processus ou les journaux.
Claude Desktop, Cursor, Windsurf
Fichier de configuration du client (Claude Desktop : ~/Library/Application Support/Claude/claude_desktop_config.json ; Cursor : ~/.cursor/mcp.json ; Windsurf : ~/.codeium/windsurf/mcp_config.json). Le bloc ci-dessous est un fichier complet : fichier vide, colle-le tel quel ; sinon, ajoute seulement l'entrée "trackily" dans ton mcpServers existant (jamais le bloc entier sous mcpServers, qui donnerait mcpServers.mcpServers) :
{
"mcpServers": {
"trackily": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://trackily.online/mcp", "--header", "Authorization:${AUTH_HEADER}"],
"env": {
"AUTH_HEADER": "Bearer tly_ap_<your_token>"
}
}
}
}
Trois détails qui comptent :
Authorization:${AUTH_HEADER}s'écrit sans espace après les deux-points (Cursor et Claude Desktop sous Windows coupent les arguments aux espaces) ; l'espace est dans la valeur, entreBeareret le jeton.AUTH_HEADERvautBearersuivi du jeton : le motBearerfait partie de la valeur.- La version de
mcp-remoten'est pas figée (npx -y mcp-remoteprend la dernière) : elle garde ainsi ses correctifs de sécurité.
Garde ce fichier pour toi (chmod 600 sur macOS/Linux) : le jeton y est en clair, c'est le seul endroit où il doit l'être.
Tu relances le client. Tu peux désormais demander : "Mes 5 meilleures campagnes ce mois ? Pause celles dont le ROI est négatif." Claude découvre get_stats, list_source_campaigns, suggest_optimizations, pause_campaign — il les enchaîne, te montre l'output, te demande validation avant les Tier-2 (les pauses). Dans Cursor, tu peux taper @trackily list my landings dans l'éditeur.
Zed
Même pont, même env, dans ~/.config/zed/settings.json. Ce fichier n'est jamais vide : ajoute seulement l'entrée "trackily" dans son context_servers (crée la clé si elle manque) :
{
"context_servers": {
"trackily": {
"source": "custom",
"command": "npx",
"args": ["-y", "mcp-remote", "https://trackily.online/mcp", "--header", "Authorization:${AUTH_HEADER}"],
"env": {
"AUTH_HEADER": "Bearer tly_ap_<your_token>"
}
}
}
}
Si le client répond 401
Le message du serveur dit ce qui manque :
- « Authorization header carries an unexpanded placeholder » —
mcp-remotea envoyé le texte${AUTH_HEADER}tel quel : la variable nommée dansargsn'existe pas dansenv(faute de frappe, blocenvoublié), ou un vieuxmcp-remoteresté en cache ne sait pas la remplacer. Corrigeenv, relance le client. - « Authorization header is not of the form "Bearer
" » —AUTH_HEADERcontient le jeton seul : ajouteBearerdevant. - « Missing bearer token » — aucun en-tête n'est arrivé : vérifie que
--headeretAuthorization:${AUTH_HEADER}sont bien deux éléments deargs.
ChatGPT Desktop
ChatGPT Desktop supporte MCP via le mode "Connectors". Branche l'URL /mcp et mets le jeton dans le champ d'en-tête d'authentification prévu par l'application — jamais dans l'URL.
Agents custom (Python, TypeScript, etc.)
N'importe quel agent qui parle JSON-RPC peut consommer Trackily. SDKs officiels :
- Python :
pip install mcp(https://github.com/modelcontextprotocol/python-sdk) - TypeScript :
npm install @modelcontextprotocol/sdk(https://github.com/modelcontextprotocol/typescript-sdk)
Exemple Python minimal — le jeton vient de l'environnement (TRACKILY_TOKEN), ni du code ni de la ligne de commande :
import os
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async with streamablehttp_client(
"https://trackily.online/mcp",
headers={"Authorization": "Bearer " + os.environ["TRACKILY_TOKEN"]}
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
tools = await session.list_tools()
result = await session.call_tool(
"list_campaigns",
{"limit": 10, "is_active": True}
)
print(result)
Architecture interne
┌────────────────────────────────────────────────┐
│ CLAUDE / CURSOR │
│ (MCP client, JSON-RPC) │
└────────────────┬───────────────────────────────┘
│
▼ HTTP POST /mcp
┌────────────────────────────────────────────────┐
│ autopilot.js (core) │
│ ┌────────────────────┐ ┌─────────────────┐ │
│ │ Auth middleware │ │ Rate limiter │ │
│ │ (bearer → token) │ │ (per-tok, /min) │ │
│ └────────────────────┘ └─────────────────┘ │
│ ┌────────────────────┐ ┌─────────────────┐ │
│ │ Scope enforcement │ │ Audit logger │ │
│ └────────────────────┘ └─────────────────┘ │
│ ┌────────────────────┐ ┌─────────────────┐ │
│ │ JSON-RPC dispatch │ │ Tier-2 helper │ │
│ └────────────────────┘ └─────────────────┘ │
└────────────────┬───────────────────────────────┘
│
┌────────────────────┼────────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ resources │ │ tools/call │ │ prompts/get │
│ /list /read│ │ │ │ │
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
│ │ │
▼ ▼ ▼
autopilot- autopilot-* 16 modules autopilot-
resources.js (one per domain) prompts.js
(slash commands)
Le core (autopilot.js) gère :
- Auth (resolution du bearer token, vérification d'expiration / révocation)
- Rate limiting (sliding window 60s par token, bucket
default+ bucketai) - Scope enforcement (chaque tool déclare ses scopes requis)
- Audit (chaque appel loggé dans
autopilot_audit_logavec params + result status) - Dispatch JSON-RPC (
initialize,tools/list,tools/call,resources/list,resources/read,prompts/list,prompts/get)
Les 16 modules enregistrent leurs tools via autopilot.registerTool({ name, description, inputSchema, scopes, handler }). Chaque tool définit ses propres scopes et délègue au DB/business layer.
L'helper Tier-2 (autopilot-tier2.js) centralise la machinerie de confirmation à deux étapes pour les opérations destructives (cf. Tier System).
Voir aussi
- MCP — Concept — JSON-RPC, handshake, capabilities
- Tokens — création, révocation, rate limit, spend cap
- Scopes — les 42 scopes + 4 presets
- Tier System — Tier-1 vs Tier-2, confirm_token, idempotent replay
- Tools Reference — les 181 tools listés
- API — endpoints HTTP REST (alternative au MCP)