MCP Tools Reference
Liste exhaustive des 339 outils MCP que Trackily publie, répartis en 25 modules. Pour chacun : son nom, les scopes qu'il exige, son tier, et la première phrase de la description que l'agent reçoit. Le serveur publie aussi 22 resources (
resources/list, URIstrackily://…) et 13 prompts (prompts/list), qui ne figurent pas dans ces tableaux.
Légende des colonnes :
- Outil — le nom à passer dans
tools/call, champparams.name. - Scopes — tous requis sur le jeton (cf. Scopes).
tools/listne montre à un jeton que les outils dont il possède tous les scopes : un outil absent de sa liste est un scope manquant, pas un outil manquant. - Tier —
T1: exécuté dès le premier appel.T2(85 outils) : le schéma accepteconfirm_token; le premier appel ne fait qu'un aperçu et rend un jeton, le second — mêmes arguments plusconfirm_token— exécute. Le jeton sert une fois et expire après 5 minutes (cf. Tier System). Quelques outils ne passent par l'aperçu que pour une partie de leurs actions (compliance_checken modeai, lesbulk_*pourdelete,verify_whatsapp_accountpour un compte 360dialog, les modèles locaux et les étapes de séquence WhatsApp pour outrepasser un refuscontenu_promotionnel) : leur description le dit. - Description — la première phrase du texte que l'agent lit dans
tools/list(les deux premières quand la première tient en moins de 25 caractères), recopiée telle quelle : en anglais pour la plupart des modules, en français pour WhatsApp. Le schéma complet des arguments se lit danstools/list.
Table des matières
- autopilot-resources — 12 outils : lectures paramétrées du tracker (stats, campagnes, offres, landings, flows, clics, conversions, leads, Automizer)
- autopilot-actions — 17 outils : écritures de base du tracker (campagnes, flows, offres d'affiliation, landings, règles Automizer)
- autopilot-source-actions — 6 outils : pause, budget et enchère directement chez les régies
- autopilot-meta-tools — 9 outils : brief, anomalies, optimisations, santé du tracking, parcours, attribution
- autopilot-content-tools — 15 outils : landings (génération IA, HTML, import, retouche, traduction, conformité)
- autopilot-workflow-tools — 8 outils : workflows de cloaking, en DSL nodes + edges
- autopilot-ecommerce-tools — 10 outils : boutiques externes connectées (Shopify…) et leur catalogue
- autopilot-ecommerce-orders-tools — 14 outils : commandes Shopify, paniers abandonnés, variantes
- autopilot-ecommerce-analytics-tools — 13 outils : KPI Shopify, clients, stocks
- autopilot-ecommerce-marketing-tools — 17 outils : collections, codes promo, script tags, webhooks Shopify
- autopilot-ecommerce-content-tools — 15 outils : pages, blogs, articles, metafields, SEO Shopify
- autopilot-ecommerce-orchestration-tools — 8 outils : briefings Shopify et opérations en masse
- autopilot-native-commerce-tools — 15 outils : produits de la boutique native et zones de livraison
- autopilot-native-orders-tools — 8 outils : commandes et clients de la boutique native
- autopilot-email-tools — 26 outils : e-mail marketing (listes, séquences, SMTP, suppression, déclencheurs)
- autopilot-whatsapp-tools — 47 outils : WhatsApp Marketing (comptes, modèles, listes, séquences, journal, suppression, réglages, voie « web », rotation des SIM)
- autopilot-smartlinks-tools — 9 outils : smartlinks
/s/:sluget leur pool d'offres - autopilot-platform-tools — 12 outils : domaines de tracking, types de conversion, règles de notification
- autopilot-payment-tools — 2 outils : comptes de paiement, lus et activés, jamais leurs clés
- autopilot-truth-tools — 3 outils : Product Truth, la fiche vérifiée d'un produit
- autopilot-theme-tools — 7 outils : thèmes des boutiques natives
- autopilot-funnel-tools — 25 outils : funnels (composition, publication, statistiques, journal)
- autopilot-merchandising-tools — 4 outils : prix barré, marque, options et prix par variante des produits natifs
- autopilot-store-tools — 21 outils : boutiques natives, domaines, duplication par marché, export et import
- autopilot-offer-tools — 16 outils : offres commerce (« Offers-EC »), bundles, moyens de paiement
resources
Les lectures du tracker qui prennent des paramètres (fenêtre de dates, identifiants, limites). Le même module publie aussi des resources trackily://… : des instantanés JSON sans argument (tableau de bord, stats sur 30 jours, campagnes, offres, landings, sources, règles Automizer…). list_automizer_rules est l'équivalent outil de la resource trackily://automizer/rules.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
get_stats |
stats:read |
T1 | Aggregated stats over an arbitrary date window, grouped by day / campaign / offer / source / landing / country / device. |
get_campaign_detail |
campaigns:read |
T1 | Full campaign detail including flows and stats over a window. |
get_offer_detail |
offers:read |
T1 | Full offer detail including day-by-day stats (Trackily + network cross-check). |
get_landing_detail |
landings:read |
T1 | Full landing page detail (type, url, redirect/protection configs). |
get_flow_detail |
flows:read |
T1 | All flows (forced/regular/default) of a campaign with their schema and filters. |
list_clicks |
reports:read |
T1 | Paginated click log. Optional filters: campaign_id, offer_id, from, to. |
list_conversions |
reports:read |
T1 | Paginated conversions log with click join. |
list_leads |
landings:read |
T1 | Captured leads (email/name/phone). |
search_entities |
campaigns:read + offers:read + landings:read + sources:read |
T1 | Search campaigns / offers / landings / sources by name or external id. |
get_automizer_audit |
automizer:read |
T1 | Recent Automizer executions (which rules fired, which actions, when). |
list_automizer_rules |
automizer:read |
T1 | List Automizer rules with their current state. |
list_offers |
offers:read |
T1 | List Trackily offers with bulk filtering. |
actions
Les écritures de base du tracker : campagnes et flows, offres d'affiliation, landings, règles Automizer. « Offre » veut dire ici l'offre d'un réseau d'affiliation — un payout. Les offres vendues dans la boutique native sont un autre objet, dans offer-tools.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
pause_campaign |
campaigns:write |
T1 | Pause a campaign (sets is_active=false). |
resume_campaign |
campaigns:write |
T1 | Resume a paused campaign (sets is_active=true). |
pause_offer |
offers:write |
T1 | Pause an offer (sets status=paused). |
resume_offer |
offers:write |
T1 | Resume a paused offer (sets status=active). |
pause_landing |
landings:write |
T1 | Pause a landing page (sets is_active=false). |
resume_landing |
landings:write |
T1 | Resume a paused landing page (sets is_active=true). |
pause_automizer_rule |
automizer:write |
T1 | Pause an Automizer rule. Its 60-second evaluation loop will skip it. |
resume_automizer_rule |
automizer:write |
T1 | Re-enable an Automizer rule so the 60-second engine evaluates it again. |
sync_offer_network_stats |
offers:write |
T1 | Trigger an Everflow / affiliate-network stats sync. |
create_campaign |
campaigns:write |
T1 | Create a new Trackily campaign. |
create_flow |
campaigns:write |
T1 | Create a new flow on an existing campaign. |
update_offer_payout |
offers:write |
T2 | Update an offer's payout amount. |
update_campaign_cost |
campaigns:write |
T2 | Update a campaign's cost_model and/or cost_value. |
duplicate_campaign |
campaigns:write |
T2 | Clone a campaign with a new name and slug. |
create_automizer_rule |
automizer:write |
T2 | Create a new Automizer rule with custom conditions and actions. |
update_automizer_rule |
automizer:write |
T2 | Update an existing Automizer rule. |
delete_automizer_rule |
automizer:write |
T2 | Permanently delete an Automizer rule. |
source-actions
Ces outils agissent directement chez la régie (Kadam, Meta, TikTok, Taboola, MGID, ExoClick, PropellerAds) : ils demandent le source_id Trackily et l'identifiant de la campagne côté régie. list_source_campaigns et test_source_connection servent à vérifier la source avant d'agir. Le budget se donne toujours en USD — l'outil convertit dans l'unité de la régie — et respecte le plafond daily_spend_cap_usd du jeton. L'enchère ne se modifie pas au niveau campagne sur Meta, TikTok et MGID.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_source_campaigns |
sources:read |
T1 | Inspect a traffic-source row: confirms the platform detected, lists any external_campaign_ids saved at source level, and tells you where to find per-campaign external IDs otherwise. |
test_source_connection |
sources:read |
T1 | Check that the API helper for a source is wired and identify which platform it targets (Kadam / Meta / TikTok / Taboola / MGID / ExoClick / PropellerAds). |
pause_source_campaign |
sources:write |
T1 | Pause a campaign directly on the ad platform (Kadam / Meta / TikTok / Taboola / MGID / ExoClick / PropellerAds). |
resume_source_campaign |
sources:write |
T1 | Resume a paused ad-platform campaign. |
update_source_campaign_budget |
sources:write |
T2 | Update the daily or total budget of an ad-platform campaign. |
update_source_campaign_bid |
sources:write |
T2 | Update the bid / CPC of an ad-platform campaign (Kadam rate, PropellerAds rate, Taboola cpc, ExoClick cpc). |
meta-tools
Synthèse et diagnostic : brief du jour, anomalies, fatigue des landings, optimisations, plan de scale, santé du tracking, parcours d'un visiteur, attribution multi-touch. Tous lisent sans rien écrire, sauf rotate_offer_in_flows, qui réécrit les flows. cross_platform_scale_plan ne fait que proposer : les appels qu'il liste (duplicate_campaign, update_source_campaign_budget) restent à lancer.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
daily_briefing |
stats:read + campaigns:read |
T1 | One-shot morning brief: KPI snapshot for today / yesterday / 7-day baseline, top winners and losers from yesterday, and a ready-made list of suggested_actions (pause / investigate) matching this server's Phase-3 action-tool schemas. |
detect_creative_fatigue |
stats:read + landings:read |
T1 | Compare landing-page performance in the last window_days against the previous window_days. |
detect_anomalies |
stats:read + campaigns:read |
T1 | Scan the last window_hours of traffic for three anomaly classes: bot-rate spikes (≥30%) per source, cost-without-conversion (>$10 spent with 0 conversions) per campaign, and ROI crashes (<-40%) per campaign. |
suggest_optimizations |
stats:read + campaigns:read + offers:read + sources:read |
T1 | Comprehensive read-only analysis over window_days across campaigns / offers / sources. |
rotate_offer_in_flows |
offers:write + flows:write |
T2 | Swap every occurrence of old_offer_id with new_offer_id inside every flow's offers[] schema. |
cross_platform_scale_plan |
campaigns:read + sources:read |
T1 | Read-only planner: given a winning campaign and a list of target traffic sources, returns an ordered list of tool calls (duplicate_campaign + update_source_campaign_budget) the AI or operator should run to clone the campaign onto each platform with a uniform test budget. |
tracking_health |
stats:read |
T1 | Tracking Health cockpit — surfaces SILENT tracking failures before they corrupt ad-platform optimisation. |
get_visitor_journey |
stats:read |
T1 | Unified cross-device customer journey — reconstructs one chronological timeline (ad click → prelander → conversion → native/Shopify order → email open/click → repeat purchase) by deterministically stitching a single identity across everything Trackily owns in one DB. |
get_attribution_report |
stats:read |
T1 | Multi-touch attribution report across the OWNED funnel (ads → offer/native order → email). |
content-tools
Les landings : les générer avec l'AI Landing Builder, les créer depuis du HTML, les importer depuis une URL, les retoucher par fragments, les traduire, les brancher sur une campagne, auditer leur conformité. Deux traductions coexistent : translate_landing rejoue le modèle de copy de l'IA et ne vaut que pour une landing générée ; translate_landing_html traduit le HTML de n'importe quelle page locale (type local : écrite à la main, importée ou générée) vers une nouvelle landing ; une page de type url n'a pas de HTML à traduire.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
generate_ai_landing |
ai:generate + landings:write |
T2 | Generate a new AI-authored landing page from a description. |
generate_landing_for_offer |
ai:generate + landings:write + offers:read |
T2 | Higher-level wrapper: reads the offer, infers the vertical from its name (antivirus, vpn, diet, …), and generates a landing page tailored to it. |
generate_landing_variants |
ai:generate + landings:write |
T2 | Create N A/B variants (1-8) of an existing AI landing. |
get_ai_landing_detail |
landings:read |
T1 | DEPRECATED since v38 landings unification. |
translate_landing_html |
landings:write |
T2 | Translate a LOCAL landing page (type 'local': its HTML is stored in Trackily) into another language, whoever wrote it — hand-written HTML, imported or cloned as local, MCP-created. |
translate_landing |
ai:generate + landings:write |
T2 | Translate an existing AI landing into N languages. |
compliance_check |
landings:read + ai:generate |
T2 | Audit a landing page for compliance with vertical-specific rules. |
create_landing |
landings:write |
T1 | Create a classic landing_pages row — the MCP equivalent of the admin "Add Landing Page" modal. |
edit_landing_html |
landings:write |
T1 | Edit a landing page's HTML by SENDING FRAGMENTS, not the whole document. |
wire_landing_button |
landings:write |
T1 | See what a funnel page WIRES, and wire one of its buttons. |
set_landing_images |
landings:write |
T1 | Replace a generated landing page's images with images YOU provide — the MCP image path. |
update_landing |
landings:write |
T1 | Update any landing_pages row (url / local / redirect_tracker / ai). |
rerender_landing_from_meta |
landings:write |
T1 | Re-render an AI-generated landing from the LLM copy + design DNA stored in its meta record. |
import_landing_from_url |
landings:write |
T1 | Download an external page and save it as a Trackily landing. |
link_landing_to_campaign |
landings:write + campaigns:write + flows:write |
T1 | Bridge an AI landing into a campaign flow so it starts receiving live traffic. |
workflow-tools
Les workflows de cloaking du Visual Workflow Builder. L'agent les manipule en DSL (nodes + edges), sans toucher à la mise en page Drawflow. Tous exigent un scope settings:* : le preset operator les lit mais ne les écrit pas.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_cloaking_workflows |
settings:read |
T1 | List every cloaking workflow configured on this Trackily instance (Visual Workflow Builder). |
get_cloaking_workflow |
settings:read |
T1 | Fetch a single cloaking workflow as a high-level DSL (nodes + edges). |
list_workflow_node_types |
settings:read |
T1 | Return the full catalog of Visual Workflow Builder node types (trigger / detect / action / advanced / route / destination) with their input/output counts, default config, and a one-line description. |
create_cloaking_workflow |
settings:write |
T2 | Create a new cloaking workflow from a DSL (nodes + edges). |
update_cloaking_workflow |
settings:write |
T2 | Patch an existing cloaking workflow. |
delete_cloaking_workflow |
settings:write |
T2 | Soft-delete a cloaking workflow (sets deleted_at). |
duplicate_cloaking_workflow |
settings:write |
T1 | Clone a workflow as a new INACTIVE draft (so the operator can edit before enabling). |
assign_cloaking_workflow_to_campaign |
settings:write |
T2 | Assign a cloaking workflow to a campaign (sets campaigns.cloaking_workflow_id). |
Cf. Cloaking — Workflows.
ecommerce-tools
Les boutiques e-commerce EXTERNES connectées à Trackily (Shopify, WooCommerce…) et leur catalogue recopié localement. À ne pas confondre avec les boutiques hébergées par Trackily (store-tools) et leurs produits (native-commerce-tools). test_store_connection ne sait vérifier qu'une boutique Shopify.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_stores |
stores:read |
T1 | List connected e-commerce stores (Shopify, WooCommerce, Stripe, …) with their platform, health, and aggregate counters (products, campaigns, revenue). |
get_store_detail |
stores:read |
T1 | Return detailed information about a single store (domain, platform, currency, sync status, aggregate counters). |
test_store_connection |
stores:read |
T1 | Ping the remote platform to verify the store's credentials. |
list_products |
products:read |
T1 | List products mirrored from connected stores into Trackily's local catalog. |
sync_products_from_shopify |
products:write |
T1 | Pull products from Shopify and upsert them into Trackily's local products table (idempotent via the sku UNIQUE index). |
create_product |
products:write |
T2 | Create a new product on the remote e-commerce platform AND mirror it in the Trackily products table. |
update_product |
products:write |
T2 | Partially update a product on the remote e-commerce platform (Shopify in Phase 2). |
delete_product |
products:write |
T2 | Permanently delete a product on the remote platform AND its Trackily mirror row. |
clone_product_from_url |
products:write |
T2 | Clone a Shopify product from a public URL into a target store in one step. |
upload_product_image |
products:write |
T1 | Attach an image to an existing product by URL. |
ecommerce-orders-tools
Les commandes Shopify, les paniers abandonnés et les variantes des produits Shopify. Les commandes de la boutique native sont dans native-orders-tools.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_orders |
orders:read |
T1 | List Shopify orders with filters (status, financial_status, fulfillment_status, created_at range, customer_id). |
get_order_detail |
orders:read |
T1 | Return the full detail of one Shopify order: line items, shipping/billing address, fulfillments, refunds, transactions. |
search_orders |
orders:read |
T1 | Search orders by order number / name prefix (e.g. "1001" or "#1001"). |
update_order_tags |
orders:write |
T1 | Replace the tags on a Shopify order. |
add_order_note |
orders:write |
T1 | Set the internal note on a Shopify order (replaces any existing note). |
cancel_order |
orders:write |
T2 | Cancel a Shopify order. IRREVERSIBLE. |
refund_order |
orders:write |
T2 | Issue a refund on a Shopify order. |
fulfill_order |
orders:write |
T2 | Create a fulfillment for a Shopify order (legacy /orders/:id/fulfillments.json endpoint). |
mark_order_as_paid |
orders:write |
T2 | Mark an order as paid by creating a successful external sale transaction. |
list_abandoned_checkouts |
checkouts:read |
T1 | List abandoned checkouts (carts that reached the checkout page but never converted). |
get_checkout_recovery_link |
checkouts:read |
T1 | Return the recovery URL for a specific abandoned checkout. |
add_product_variant |
products:write |
T2 | Add a new variant to an existing Shopify product. |
update_product_variant |
products:write |
T2 | Update an existing Shopify variant. |
delete_product_variant |
products:write |
T2 | Permanently delete a variant from a Shopify product. |
ecommerce-analytics-tools
Les KPI d'une boutique Shopify, ses clients et ses stocks. Les clients de la boutique native se lisent avec list_native_customers.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
get_shop_summary_stats |
analytics:read |
T1 | Summary KPIs for a Shopify store over a date window: orders count, revenue, AOV, cancelled/refunded counts, unique customers (new vs returning), daily revenue breakdown. |
get_best_selling_products |
analytics:read |
T1 | Top N products by quantity sold or revenue in the window. |
get_revenue_by_period |
analytics:read |
T1 | Revenue + orders count bucketed by day / week / month. |
get_conversion_metrics |
analytics:read |
T1 | Rough funnel view: completed orders vs abandoned checkouts in the window + completion rate. |
list_customers |
customers:read |
T1 | List customers with optional date-range filters. |
get_customer_detail |
customers:read |
T1 | Full detail for one customer: profile, addresses, recent orders (up to 20), admin URL. |
search_customers |
customers:read |
T1 | Search customers via Shopify query syntax. |
list_customer_orders |
customers:read + orders:read |
T1 | List orders for a single customer. |
create_customer |
customers:write |
T2 | Create a new customer on a Shopify store. |
update_customer |
customers:write |
T2 | Partial update of a customer. |
list_locations |
inventory:read |
T1 | List all physical/virtual locations on the store. |
list_inventory_levels |
inventory:read |
T1 | List inventory levels per (inventory_item_id, location_id). |
set_inventory_level |
inventory:write |
T1 | Set the absolute stock quantity of an inventory item at a location. |
ecommerce-marketing-tools
Collections, codes promo, script tags et webhooks d'une boutique Shopify.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_collections |
collections:read |
T1 | List custom collections on a Shopify store. |
get_collection_detail |
collections:read |
T1 | Full detail of one collection (title, body_html, handle, sort_order, image, SEO, admin_url). |
create_collection |
collections:write |
T2 | Create a custom (manually-managed) collection. |
update_collection |
collections:write |
T2 | Partially update a custom collection. |
delete_collection |
collections:write |
T2 | Delete a custom collection. |
add_product_to_collection |
collections:write |
T1 | Add a product to a custom collection (creates a collect row). |
remove_product_from_collection |
collections:write |
T1 | Remove a product from a custom collection. |
list_discount_codes |
discounts:read |
T1 | List all price rules and their discount codes. |
create_discount_code |
discounts:write |
T2 | Create a discount code in one call (creates price rule + code together). |
delete_discount_code |
discounts:write |
T2 | Delete a discount code. Two-step with confirm_token. |
create_price_rule |
discounts:write |
T2 | Create a standalone price rule (automatic discount — no code). |
list_script_tags |
marketing:read |
T1 | List all script tags injected on the storefront. |
create_script_tag |
marketing:write |
T2 | Inject a JS file on the storefront. |
delete_script_tag |
marketing:write |
T1 | Remove a script tag from the storefront. |
list_webhooks |
marketing:read |
T1 | List all registered webhooks. |
create_webhook |
marketing:write |
T2 | Subscribe to a Shopify event. |
delete_webhook |
marketing:write |
T1 | Unsubscribe a webhook. Tier-1 safe — removal stops future deliveries but can always be re-created. |
ecommerce-content-tools
Pages, blogs et articles Shopify, metafields des produits, et deux outils d'IA sur les fiches produit (description, traduction). seo_audit_product n'appelle aucun LLM : ce sont des règles.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_pages |
content:read |
T1 | List Shopify CMS pages (About, Contact, Policies, custom pages). |
create_page |
content:write |
T2 | Create a new CMS page. Two-step with confirm_token. |
update_page |
content:write |
T2 | Partial update of a CMS page. |
delete_page |
content:write |
T2 | Delete a CMS page. Two-step with confirm_token. |
list_blogs |
content:read |
T1 | List blogs on the store. Most stores have 1 blog ("News" by default). |
list_articles |
content:read |
T1 | List articles in a blog. Filter by tag or published_status. |
create_article |
content:write |
T2 | Create a blog article. Two-step with confirm_token. |
update_article |
content:write |
T2 | Partial update of a blog article. |
delete_article |
content:write |
T2 | Delete a blog article. Two-step with confirm_token. |
list_product_metafields |
products:read |
T1 | List custom metafields set on a product. |
set_product_metafield |
products:write |
T1 | Create or update a product metafield. |
delete_product_metafield |
products:write |
T1 | Remove a metafield from a product. |
generate_product_description_ai |
products:write + ai:generate |
T1 | Use an LLM (provider configured in Settings → AI Landing Builder) to write a fresh product description applying a copywriting framework. |
translate_product |
products:write + ai:generate |
T1 | Translate a product's title + body_html + tags to another language via LLM. |
seo_audit_product |
products:read |
T1 | SEO audit of a product: title length, description length, handle quality, alt-text coverage on images, tags, SEO metafields. |
ecommerce-orchestration-tools
Les briefings Shopify (jour, semaine), les alertes de stock et de produits sans vente, l'audit du catalogue, et deux opérations en masse.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
daily_shopify_briefing |
analytics:read + orders:read + checkouts:read |
T1 | One-shot routine for operators: revenue + orders today vs yesterday, last-7d best sellers, abandoned checkouts, checkout funnel, suggested actions. |
detect_stock_alerts |
products:read + inventory:read |
T1 | Scan active products and flag variants with inventory_quantity ≤ threshold. |
detect_sluggish_products |
products:read + analytics:read |
T1 | Find active products with 0 sales over the last N days. |
weekly_performance_report |
analytics:read + orders:read |
T1 | This-week vs last-week KPIs (orders, revenue, AOV, new customers) with WoW deltas, plus a 28-day daily revenue series and top 10 revenue products this week. |
get_shop_info |
stores:read |
T1 | Shop metadata: name, email, domain, plan, currency, timezone, country, owner. |
check_shop_health |
products:read |
T1 | Catalog quality audit: products without images, short/missing descriptions, variants without SKU, zero-inventory variants, missing alt text, overlong titles. |
auto_fulfill_ready_orders |
orders:write |
T2 | Bulk-fulfill every paid-but-unfulfilled order created in the last N days. |
bulk_update_product_prices |
products:write |
T2 | Change prices on multiple products in one call. |
native-commerce-tools
Les produits hébergés par Trackily — pas Shopify — et les zones de livraison. Physique ou numérique se décide par produit, ce qui permet à un même bundle de mêler un colis et un bonus numérique. Le prix vit sur les variantes : create_native_product le pose sur celle qu'il crée (price), set_variant_pricing (merchandising-tools) le règle variante par variante. Écrire une zone de livraison exige settings:write, absent du preset operator.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
create_native_product |
products:write |
T1 | Create a product in the Trackily-hosted catalogue — NOT a Shopify product. |
update_native_product |
products:write |
T1 | Change a native product's name, description, slug, currency, images, its physical/digital type, or its status. |
delete_native_product |
products:write |
T2 | Remove a product from the native catalogue. |
bulk_native_products |
products:write |
T2 | Apply one action to several native products at once: activate, deactivate (back to draft — the product stays with its variants and history, stops selling; this is how you archive), or delete (soft, recoverable; the product's auto-offer stops selling with it; past orders keep their lines). |
list_native_products |
products:read |
T1 | List products in the native commerce catalog (the Trackily-hosted storefront, distinct from the Shopify-synced products surface). |
get_native_product_detail |
products:read |
T1 | Fetch a single native commerce product with its full options + variants matrix. |
generate_landing_for_product |
ai:generate + landings:write + products:read |
T2 | Generate an AI-authored landing page tied to a native_products row. |
list_shipping_zones |
settings:read |
T1 | List every shipping zone with its rates. |
get_shipping_zone |
settings:read |
T1 | Fetch a single shipping zone with all its rates. |
create_shipping_zone |
settings:read + settings:write |
T2 | Create a shipping zone with optional inline rates. |
update_shipping_zone |
settings:read + settings:write |
T2 | Update a shipping zone's name / countries / status / position. |
delete_shipping_zone |
settings:read + settings:write |
T2 | Delete a shipping zone (cascades to its rates). |
create_shipping_rate |
settings:read + settings:write |
T2 | Add a rate to an existing zone. |
update_shipping_rate |
settings:read + settings:write |
T2 | Update a single rate. Tier-2. |
delete_shipping_rate |
settings:read + settings:write |
T2 | Delete a single shipping rate. |
Cf. Commerce.
native-orders-tools
Les commandes et les clients de la boutique native. À lire avant de citer un chiffre d'affaires : un funnel écrit une commande par étape vendue, et list_native_orders les replie — une ligne par achat, la vente principale seule. Son total ne vaut donc que la première étape ; ce que l'acheteur a réellement payé est total_parcours, et parcours_etapes dit combien de commandes l'achat couvre. include_upsells: true rend la vue à plat.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_native_customers |
orders:read |
T1 | People who bought on a Trackily-hosted storefront, aggregated from native orders (order count, total spent, first/last order). |
list_native_orders |
orders:read |
T1 | List native commerce orders (the storefront Trackily hosts itself). |
get_native_order_detail |
orders:read |
T1 | Fetch a single native commerce order with line items, customer info, shipping address, transactions ledger, and current payment + fulfillment status. |
get_native_product_stats |
reports:read + products:read |
T1 | Performance bundle for a single native commerce product: KPI summary (clicks/conversions/revenue/cost/CR/EPC/AOV/profit), daily breakdown, linked campaigns, linked landings (with A/B price-override badges), and variant performance breakdown. |
mark_native_order_paid |
orders:write |
T2 | Mark a native commerce order as paid. |
fulfill_native_order |
orders:write |
T2 | Update the fulfillment status of a native commerce order, optionally attaching a tracking number + carrier. |
cancel_native_order |
orders:write |
T2 | Cancel a native commerce order. |
refund_native_order |
orders:write |
T2 | Trigger a Stripe or PayPal refund on a paid native commerce order. |
Exemple list_native_orders :
// Requête
{
"name": "list_native_orders",
"arguments": { "limit": 10, "payment_status": "paid" }
}
// Réponse (extrait : chaque commande porte aussi sous-total, frais de port, taxes,
// remise, moyen de paiement, boutique, landing et campagne)
{
"status": "ok",
"tool": "list_native_orders",
"total": 1,
"count": 1,
"orders": [
{
"id": 12,
"order_number": "TR-000012",
"created_at": "2026-05-18T14:22:11.421Z",
"customer_email": "client@example.com",
"currency": "EUR",
"total": 49,
"payment_status": "paid",
"fulfillment_status": "fulfilled",
"funnel_id": null,
"parcours_etapes": 1,
"total_parcours": 49
}
]
}
email-tools
L'e-mail marketing : listes, séquences, relais SMTP, abonnés, suppression globale, déclencheurs postback → e-mail. Ajouter un relais SMTP exige aussi settings:write. Cf. la section Email pour les concepts.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_email_smtp_servers |
email:read |
T1 | List every configured SMTP relay (Gmail, SendGrid, Postmark, SES, …) with quotas, effective send counts (capacite) and the same send verdict as the admin screen (verdict: peut_envoyer true/false/null, etat, motif, libelle in French — the screen calls it « Peut envoyer »). |
list_email_lists |
email:read |
T1 | List every email list (autoresponder list) with subscriber counts, opt-in mode, tracking flags, and how many landing pages are bound to it. |
get_email_list_detail |
email:read |
T1 | Full picture of an email list: settings + subscriber-status histogram + 10 most-recent subscribers + sequences attached + landings bound to it. |
list_email_sequences |
email:read |
T1 | List autoresponder sequences. |
get_email_sequence_detail |
email:read |
T1 | Inspect a sequence: settings + every step (position, delays, subject, 200-char body preview, active flag). |
list_email_subscribers |
email:read |
T1 | List subscribers of a list. |
get_email_subscriber_timeline |
email:read |
T1 | Per-subscriber audit + engagement intel: full event timeline (opens/clicks/unsubs/bounces) with timestamps, real-vs-prefetch counters, hour-of-day histogram of opens (24 buckets), and the learned preferred_send_hour used by Send Time Optimization. |
list_email_sends |
email:read |
T1 | Tail the email sends audit log. |
get_email_metrics |
email:read |
T1 | Aggregate KPIs over the last N days: sent/failed/bounced/queued counts + open rate, click rate, bounce rate. |
list_email_suppression |
email:read |
T1 | List globally suppressed email addresses (cross-list). |
create_email_smtp_server |
email:write + settings:write |
T2 | Add a new SMTP relay (e.g. SendGrid, Postmark, SES). |
create_email_list |
email:write |
T1 | Create an email list. smtp_server_id is OPTIONAL — you can collect subscribers first and attach an SMTP relay later via update_email_list. |
update_email_list |
email:write |
T1 | Patch list settings (any subset of fields). |
delete_email_list |
email:write |
T2 | Soft-delete an email list. |
create_email_sequence |
email:write |
T1 | Create an autoresponder sequence on a list. |
add_email_sequence_step |
email:write |
T1 | Append (or insert) a step in a sequence. |
update_email_sequence_step |
email:write |
T1 | Patch a sequence step. Tier-1. |
enroll_email_subscriber |
email:write |
T1 | Enroll an email into a list and (unless skip_double_optin or list.double_opt_in is false) start the sequence. |
unsubscribe_email_subscriber |
email:write |
T1 | Manually unsubscribe an email from a single list. |
add_to_email_suppression |
email:write |
T1 | Add an email to the GLOBAL suppression list (cross-list). |
bind_landing_to_email_list |
email:write + landings:write |
T1 | Bind (or unbind) a landing page to an email list. |
send_test_email |
email:write |
T1 | Send ONE test email immediately (synchronous, bypasses the queue). |
list_email_conversion_triggers |
email:read |
T1 | List active postback→email conversion triggers. |
create_email_conversion_trigger |
email:write |
T1 | Create a new postback→email trigger. |
update_email_conversion_trigger |
email:write |
T1 | Patch a conversion trigger (any subset of fields). |
delete_email_conversion_trigger |
email:write |
T1 | Soft-delete a conversion trigger. |
Exemple enroll_email_subscriber :
// Requête
{
"name": "enroll_email_subscriber",
"arguments": {
"list_id": 7,
"email": "client@example.com",
"name": "Marie Dupont",
"custom_fields": { "city": "Paris" },
"source": "manual:admin"
}
}
// Réponse (extrait : `subscriber` est la ligne complète de l'abonné)
{
"ok": true,
"subscriber": {
"id": 421,
"list_id": 7,
"email": "client@example.com",
"name": "Marie Dupont",
"status": "subscribed",
"custom_fields": { "city": "Paris" },
"source": "manual:admin"
},
"queued_steps": 3
}
Les autres issues : awaiting_confirmation: true quand la liste est en double opt-in (l'e-mail de confirmation part, aucune étape n'est programmée) ; reason: "previously_opted_out" pour une adresse désinscrite, rebondie ou plaignante (rien n'est programmé) ; skipped: true avec reason = suppressed, list_inactive, disposable ou no_mx quand l'adresse n'est pas inscrite du tout. Une erreur revient sous la forme { "error": "…" }.
whatsapp-tools
Le module WhatsApp Marketing vu par l'agent, sous sa propre paire de scopes whatsapp:read / whatsapp:write : un jeton taillé pour l'e-mail n'y a pas accès. Deux outils exigent un scope de plus, parce qu'ils modifient autre chose qu'un objet WhatsApp : bind_landing_to_whatsapp_list (landings:write) et bind_campaign_to_whatsapp_list (campaigns:write), les jumeaux de bind_landing_to_email_list. Sur un compte de l'API officielle, chaque message est facturé par le fournisseur et engage la note de qualité du numéro ; sur la voie « web », rien n'est facturé, mais chaque envoi engage la SIM elle-même, et un numéro banni est perdu. Les descriptions de send_test_whatsapp et de simulate_whatsapp_routing font cette distinction. Un jeton créé avant l'arrivée de ces scopes ne voit aucun de ces outils — cf. Scopes.
Ce que l'agent ne peut pas faire, délibérément :
- Créer ou modifier un compte WhatsApp. Les identifiants se saisissent dans l'admin ; aucun schéma d'entrée ne porte de champ de secret, et les comptes se lisent jetons masqués.
- Démarrer ou couper l'appairage d'une SIM (voie « web », par WhatsApp Web).
get_whatsapp_pairing_stateconstate l'état ; le QR ne sort jamais dans une réponse. - Rattacher une SIM à un groupe. Le groupe se crée ici, le rattachement se fait à l'écran.
- Poser un blocage à la place du client.
add_to_whatsapp_suppressionn'accepte quemanualetinvalid_number. Un STOP (stop_keyword) ou une désinscription remontée par le fournisseur (opt_out) ne se retire pas d'ici.
Chaque outil vérifie la licence à l'appel : si elle n'inclut pas la fonctionnalité whatsapp_marketing, il répond par un refus lisible qui dit comment l'obtenir, sans rien lire ni écrire.
Quatre familles à connaître :
- Modèles locaux (
*_whatsapp_local_template) : seulement sur un compte du fournisseurweb, qui n'a pas de catalogue chez un fournisseur. Les variables{{1}},{{2}}… se dérivent du texte, sans trou. La catégorie (MARKETINGouUTILITY) décide qui reçoit le message : elle doit dire la vérité sur le contenu. Un texteUTILITYqui ressemble à une promotion (remise chiffrée, code promo, soldes…) est refusé (contenu_promotionnel), comme les valeurs fixes promotionnelles d'une étape de séquence ;utility_confirme: truel'outrepasse par un jeton de confirmation, et l'agent ne le fait qu'avec l'accord de l'opérateur, qui a vu les passages en cause. - Séquences et commandes annulées :
create_whatsapp_sequenceacceptecible_commande(activepar défaut, ouannuleepour relancer un client qui a annulé : délais comptés depuis l'annulation, une fois par client, jamais tant qu'une autre de ses commandes tient dans la liste — un doublon annulé ne relance pas). La cible ne se change plus ensuite, et une séquenceannuleene peut pas être la séquence par défaut d'une liste.list_whatsapp_subscribersfiltre parstatut_commande, avec la même règle : une commande annulée dont une autre commande du même client tient dans la liste (doublon, rachat en cours dans un funnel à upsells) se litactive. - Rotation des SIM : chaque groupe porte une vocation (
transactionnel,marketing,mixte) ; les règles de routage s'évaluent dans l'ordre, et la première qui correspond désigne le groupe — sauf si ce groupe n'a pas la vocation de l'envoi, est en pause ou archivé : la règle est alors ignorée (l'écart est journalisé) et la suivante est essayée.simulate_whatsapp_routingdit quelle SIM partirait et pourquoi les autres sont écartées, sans rien envoyer ni écrire. - Numéros : les recherches par numéro de
list_whatsapp_sends,list_whatsapp_suppressionetlist_whatsapp_subscriberscouvrent toutes les formes équivalentes d'un même numéro. Pour les deux premières, un numéro écrit en national (sans indicatif) exigepays(ISO-2) : sans lui, une liste vide ne prouve rien.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_whatsapp_accounts |
whatsapp:read |
T1 | Liste les comptes WhatsApp (numéros) configurés : fournisseur, état, qualité, palier, clé de webhook. |
get_whatsapp_account |
whatsapp:read |
T1 | Détail d’un compte WhatsApp : fournisseur, configuration non secrète, état de la dernière vérification, limites. |
verify_whatsapp_account |
whatsapp:write |
T2 | Demande au fournisseur si les identifiants du compte sont bons, et rafraîchit qualité et palier. |
sync_whatsapp_templates |
whatsapp:write |
T1 | Resynchronise les modèles du compte depuis le fournisseur (noms, langues, catégories, statuts d’approbation). |
list_whatsapp_templates |
whatsapp:read |
T1 | Modèles connus d’un compte, avec leur statut et leurs variables. |
list_whatsapp_lists |
whatsapp:read |
T1 | Listes WhatsApp avec leurs compteurs d’abonnés par statut. |
get_whatsapp_list |
whatsapp:read |
T1 | Détail d’une liste : réglages, compteurs par statut, nombre de séquences et d’envois en file. |
create_whatsapp_list |
whatsapp:write |
T1 | Crée une liste WhatsApp. Le slug se dérive du nom s’il n’est pas donné, et se suffixe d’un numéro s’il est déjà pris (« acheteurs-maroc-2 ») ; un slug FOURNI et déjà pris est refusé, jamais suffixé dans le dos de l’opérateur. |
update_whatsapp_list |
whatsapp:write |
T1 | Modifie une liste (tous champs optionnels ; seuls ceux fournis changent). |
archive_whatsapp_list |
whatsapp:write |
T2 | Archive une liste. TIER 2 : premier appel = aperçu (abonnés, envois encore en file) + confirm_token ; second appel avec le MÊME argument plus confirm_token = archivage. |
list_whatsapp_subscribers |
whatsapp:read |
T1 | Abonnés d’une liste. La recherche porte sur le nom et le numéro ; un numéro est cherché sous toutes ses formes équivalentes (un mobile brésilien saisi avec le 9 se retrouve sous sa forme à 8 chiffres). |
enroll_whatsapp_subscriber |
whatsapp:write |
T1 | Inscrit un numéro dans une liste et lance sa séquence par défaut. |
unsubscribe_whatsapp_subscriber |
whatsapp:write |
T1 | Désinscrit un abonné de SA liste et annule ses envois encore en file. |
get_whatsapp_subscriber_timeline |
whatsapp:read |
T1 | Chronologie d’un abonné : sa preuve de consentement complète (texte accepté, version, langue, IP et navigateur de qui a coché), ses envois et tous ses événements, y compris ceux arrivés sous une autre forme de son numéro (un STOP, un clic sur un bouton). |
list_whatsapp_sequences |
whatsapp:read |
T1 | Séquences, filtrables par liste. |
get_whatsapp_sequence |
whatsapp:read |
T1 | Détail d’une séquence : ses étapes dans l’ordre, le modèle de chacune et son statut d’approbation. |
create_whatsapp_sequence |
whatsapp:write |
T1 | Crée une séquence sous une liste. |
update_whatsapp_sequence |
whatsapp:write |
T1 | Modifie une séquence (nom, description, activation). |
add_whatsapp_sequence_step |
whatsapp:write |
T2 | Ajoute une étape à la fin d’une séquence. |
update_whatsapp_sequence_step |
whatsapp:write |
T2 | Modifie une étape. Le modèle et les paramètres sont revérifiés : une étape ne peut pas devenir inenvoyable par une modification. |
delete_whatsapp_sequence_step |
whatsapp:write |
T1 | Supprime une étape et annule ses envois encore en file. |
list_whatsapp_sends |
whatsapp:read |
T1 | Journal des envois, du plus récent au plus ancien. |
get_whatsapp_metrics |
whatsapp:read |
T1 | Mesures d’envoi sur une portée et une seule : list_id, sequence_id OU account_id. |
send_test_whatsapp |
whatsapp:write |
T2 | Envoie UN vrai message WhatsApp de test (kind « test »). |
list_whatsapp_suppression |
whatsapp:read |
T1 | Registre des numéros bloqués (STOP, plaintes, numéros invalides). |
add_to_whatsapp_suppression |
whatsapp:write |
T1 | Bloque un numéro sur TOUTES les listes, sous toutes ses formes équivalentes. |
remove_from_whatsapp_suppression |
whatsapp:write |
T1 | Retire un blocage, par identifiant de ligne ou par numéro (toutes les écritures du contact partent ensemble ; si l’une d’elles est verrouillée, RIEN n’est retiré). |
list_whatsapp_conversion_triggers |
whatsapp:read |
T1 | Déclencheurs postback → liste WhatsApp. |
create_whatsapp_conversion_trigger |
whatsapp:write |
T1 | Crée un déclencheur : quand un postback tombe pour offer_id (ou pour toute offre si absent), l’acheteur est inscrit dans target_list_id et reçoit sa séquence par défaut. |
update_whatsapp_conversion_trigger |
whatsapp:write |
T1 | Modifie un déclencheur (tous champs optionnels). |
bind_landing_to_whatsapp_list |
whatsapp:write + landings:write |
T1 | Lie (ou détache) une landing à une liste WhatsApp : chaque lead de son formulaire qui porte un téléphone y est inscrit et reçoit la séquence par défaut de la liste. |
bind_campaign_to_whatsapp_list |
whatsapp:write + campaigns:write |
T1 | Lie (ou détache) une campagne à une liste WhatsApp post-achat : chaque commande payée de la campagne qui porte un téléphone y inscrit l’acheteur, qui reçoit la séquence par défaut de la liste. |
get_whatsapp_settings |
whatsapp:read |
T1 | Les réglages WhatsApp de l’opérateur, tels qu’ils s’appliquent vraiment (une valeur illisible en base est rendue à son défaut). |
update_whatsapp_settings |
whatsapp:write |
T2 | Change un ou plusieurs réglages WhatsApp. |
list_whatsapp_local_templates |
whatsapp:read |
T1 | Modèles LOCAUX d’un compte « web » (WhatsApp Web, voie non officielle) : ceux qui s’écrivent dans Trackily, faute de catalogue chez un fournisseur. |
create_whatsapp_local_template |
whatsapp:write |
T2 | Écrit un modèle local sur un compte « web ». |
update_whatsapp_local_template |
whatsapp:write |
T2 | Modifie un modèle local (tous champs optionnels ; seuls ceux fournis changent). |
delete_whatsapp_local_template |
whatsapp:write |
T1 | Supprime un modèle local. |
get_whatsapp_pairing_state |
whatsapp:read |
T1 | État de la session WhatsApp Web d’un compte « web » : absente, appairage en cours, connectee, deconnectee ou bannie, avec le numéro appairé, la date d’appairage et l’échauffement du jour. |
list_whatsapp_groups |
whatsapp:read |
T1 | Groupes de SIM et leur VOCATION : « transactionnel » (confirmations et suivi de commande), « marketing » (campagnes et remarketing), « mixte » (l’opérateur qui n’a qu’une SIM — un choix explicite, jamais un défaut). |
create_whatsapp_group |
whatsapp:write |
T1 | Crée un groupe de SIM pour un métier. |
update_whatsapp_group |
whatsapp:write |
T1 | Modifie un groupe (tous champs optionnels ; seuls ceux fournis changent). |
archive_whatsapp_group |
whatsapp:write |
T2 | Archive un groupe de SIM. |
list_whatsapp_routing_rules |
whatsapp:read |
T1 | Règles de routage, dans leur ordre d’évaluation : la PREMIÈRE dont toutes les conditions correspondent désigne son groupe. |
create_whatsapp_routing_rule |
whatsapp:write |
T1 | Crée une règle : quand toutes ses conditions correspondent, l’envoi part d’une SIM de groupe_id. |
update_whatsapp_routing_rule |
whatsapp:write |
T1 | Modifie une règle (tous champs optionnels ; seuls ceux fournis changent). |
simulate_whatsapp_routing |
whatsapp:read |
T1 | Dit quelle SIM partirait pour ce numéro, ce type de message et cette liste, par quel chemin (origine, et regle_id quand une règle a gagné), et pourquoi chaque autre SIM candidate est écartée — la seule façon honnête de vérifier des règles sans envoyer un vrai message (send_test_whatsapp, lui, part pour de vrai : facturé par le fournisseur, ou parti du numéro d’une SIM « web »). |
smartlinks-tools
Les smartlinks : des URL publiques /s/:slug qui envoient chaque visiteur vers une paire (offre, landing facultative) de leur pool, choisie selon la stratégie du smartlink (routing_strategy) : epc_ranked par défaut, qui favorise l'EPC observé en gardant une part d'exploration ; sinon waterfall, weighted, round_robin ou predictive. Un smartlink naît avec un pool vide : tant qu'aucune paire n'est ajoutée (add_offer_to_smartlink), et chaque fois qu'aucune ne convient au visiteur, il envoie vers son repli — fallback_offer_id, sinon fallback_url — et répond 404 s'il n'en a aucun. En pause, /s/:slug répond 404.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_smartlinks |
offers:read + landings:read |
T1 | List every smartlink (auto-optimising /s/:slug URLs that route visitors to the best offer in a configurable pool). |
get_smartlink_detail |
offers:read + landings:read |
T1 | Fetch a single smartlink with its full pool (offers + landings joined) and the last 20 routing decisions from smartlink_routes. |
create_smartlink |
offers:read + landings:write |
T1 | Create a new smartlink (the /s/:slug definition). |
add_offer_to_smartlink |
offers:read + landings:write |
T2 | Add an (offer, optional landing) pair to a smartlink's pool with per-pair filters and weight/priority. |
update_smartlink_offer |
offers:read + landings:write |
T2 | Patch any combination of filter / weight / priority / cap / payout-floor fields on an existing pool row (smartlink_offers.id). |
remove_offer_from_smartlink |
offers:read + landings:write |
T2 | Hard-delete a pool row (matched on smartlink_id + offer_id + landing_id). |
pause_smartlink |
offers:read + landings:write |
T1 | Set is_active=false. /s/:slug starts returning 404. |
resume_smartlink |
offers:read + landings:write |
T1 | Set is_active=true. /s/:slug serves traffic again. |
get_smartlink_routing_stats |
offers:read + reports:read |
T1 | Aggregate smartlink_routes over a time window, grouped by offer / landing / geo / device / via. |
platform-tools
Trois réglages de la plateforme que l'admin a toujours eus : les domaines de tracking, les types de conversion, les règles de notification. Créer et modifier s'exécutent directement, supprimer passe par l'aperçu. Toutes les écritures exigent settings:write, absent du preset operator.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_domains |
settings:read |
T1 | List the tracking domains (archived ones excluded — they are no longer served): hostname, bound campaign, SSL flag, active state, what each one serves (usages) and a server-computed readiness verdict {code, famille, motif, a_faire} — the same verdict the Domains screen shows. |
create_domain |
settings:write |
T1 | Register a new tracking domain. |
update_domain |
settings:write |
T1 | Change a tracking domain: rebind it to another campaign, toggle SSL, or activate/deactivate it. |
delete_domain |
settings:write |
T2 | Delete a tracking domain. |
list_conversion_types |
settings:read |
T1 | List the conversion types postbacks can report (name, slug, payout type, colour, active). |
create_conversion_type |
settings:write |
T1 | Create a conversion type (e.g. "Trial", "Sale", "Rebill") so postbacks can classify conversions beyond the default. |
update_conversion_type |
settings:write |
T1 | Rename a conversion type, change its payout type or report colour, or activate/deactivate it. |
delete_conversion_type |
settings:write |
T2 | Delete a conversion type. |
list_notification_rules |
settings:read |
T1 | List multi-channel notification rules: which event fires them, their conditions, the channels they notify (Slack / Telegram / email / webhook), cooldown and last trigger. |
create_notification_rule |
settings:write |
T1 | Create a notification rule so the operator is alerted when something happens (e.g. a conversion lands, ROI drops, bot rate spikes). |
update_notification_rule |
settings:write |
T1 | Update a notification rule — rename it, change its event, conditions, channels, message template or cooldown, or pause it with is_active=false. |
delete_notification_rule |
settings:write |
T2 | Delete a notification rule. |
payment-tools
Ce que l'agent sait des comptes de paiement : leur existence et leur état, jamais leurs clés. Il peut activer, désactiver ou choisir le compte par défaut ; créer un compte ou changer une clé se fait dans l'écran Payment Methods de l'admin (accordéon E-Commerce) ou par l'OAuth Stripe — une clé ne transite pas par une conversation d'agent. Désactiver un compte rend impayables les offres qui en dépendaient, et un funnel live qui l'utilise refusera d'être publié.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_payment_accounts |
settings:read |
T1 | List the payment accounts configured on this install — what a native offer can be paid with. |
set_payment_account_state |
settings:write |
T1 | Turn a payment account on or off, or make it the default. |
Cf. Commerce — comptes de paiement.
truth-tools
La Product Truth : la fiche vérifiée d'un produit, que remplit le client ou un LLM qui fait sa recherche à travers ce serveur MCP. Chaque fait porte un statut — verified (exige une source_url), customer_reported, inferred, unknown — et un fait verified sans source est refusé. save_product_truth remplace la fiche entière et incrémente sa version : relis-la avec get_product_truth avant de la renvoyer. generate_landing_for_offer et generate_landing_for_product la reprennent seuls ; generate_ai_landing la prend par product_truth_id.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
save_product_truth |
landings:write |
T1 | Save the PRODUCT TRUTH — the verified knowledge base of a product, filled by the client or by an LLM doing web research through this MCP. |
get_product_truth |
landings:read |
T1 | Read a Product Truth in full — by truth_id, by subject (subject_type + subject_id), or by name for a free-standing subject (subject_type "libre" + subject_name). |
list_product_truths |
landings:read |
T1 | List the Product Truths on this install — subject, research_state, fact counts by status, version. |
theme-tools
Les thèmes des boutiques natives. Un thème est une DONNÉE, pas du HTML : l'agent remplit un schéma validé, donc son résultat est correct ou refusé. L'ordre de travail : get_theme_vocabulary (ce qu'un thème peut dire), preview_theme (voir avant d'écrire), create_theme ou update_theme, puis un nouvel aperçu. set_native_store_theme (store-tools) applique un thème à une boutique.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
get_theme_vocabulary |
landings:read |
T1 | CALL THIS FIRST when working on themes. |
list_themes |
landings:read |
T1 | List saved storefront themes with their archetype, whether they are starters, and how many stores use each. |
get_theme |
landings:read |
T1 | Full detail of one theme: its DNA (tokens) and per-page section configuration. |
preview_theme |
landings:read |
T1 | Get a URL rendering a theme with neutral placeholder copy. |
create_theme |
landings:write |
T1 | Create a storefront theme. |
update_theme |
landings:write |
T1 | Adjust a theme. The dna object is MERGED into the existing one, so you can send a single colour without resending everything. |
delete_theme |
landings:write |
T2 | Delete a theme. Two-step: the first call returns a preview naming the stores that would lose their default theme, plus a confirm_token to pass back. |
funnel-tools
Les funnels : une suite ordonnée d'étapes typées, reliées par des transitions. L'agent passe par le même chemin que l'admin — un funnel composé par un LLM n'a droit à aucune validation plus laxiste. L'ordre de travail : la resource trackily://funnels/vocabulary (ce qu'on peut écrire), get_funnel_pickers (les boutiques, pages et offres qui existent), create_funnel (l'en-tête, en brouillon), set_funnel_composition (étapes et transitions, remplacement entier), preview_funnel, puis publish_funnel, qui refuse en nommant chaque contrôle manqué. Le plus court chemin reste un modèle : list_funnel_templates, puis create_funnel_from_template.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_funnels |
landings:read |
T1 | List funnels with status (draft|live|paused), store, domain, currency and step count. |
get_funnel |
landings:read |
T1 | Full detail of one funnel: header, ordered steps (with A/B variants), transitions, the current validation result (errors name the step and the rule) and minimal per-step stats (views, unique_views, submits). |
list_funnel_templates |
landings:read |
T1 | The ready-made funnel templates: structure AND pages already written (lead capture, tripwire, long sales page, cash-on-delivery, affiliate with a cloaking gate, trial then refill). |
create_funnel_from_template |
landings:write |
T1 | Create a complete funnel from a template: steps, transitions and pages in one call. |
get_funnel_pickers |
landings:read |
T1 | CALL BEFORE composing: the ids you may reference — stores (with currency), domains (with store), landing pages (with wa_list_id and wa_liste_active: linked to an active WhatsApp list), offers (with cod_enabled), cloaking workflows, e-mail sequences, and whatsapp { licence, option_active, signature }: all three must be true for a step’s settings.wa_consent_checkbox to show the WhatsApp consent box. |
create_funnel |
landings:write |
T1 | Create the funnel HEADER in draft (no steps yet). |
update_funnel |
landings:write |
T1 | Change header fields only (status is NOT writable here — use publish/pause/unpublish): name, funnel_path, domain_id, store_id, currency, purchase_policy (each_order|consolidated), upsell_window_min, upsell_window_max_min, cod_confirm_step, cod_surcharge, pixels, settings. |
duplicate_funnel_for_language |
landings:write |
T2 | Duplicate a whole funnel (steps, transitions, variants, offers, settings) into a NEW draft funnel, optionally TRANSLATING every landing page into language. |
get_funnel_family |
landings:read |
T1 | List every funnel in the same family as this one — the original and all its language/market copies, with their language, currency and status. |
set_funnel_composition |
landings:write |
T1 | REPLACE the whole composition (steps + transitions) in one transaction — anything not sent is deleted. |
publish_funnel |
landings:write |
T1 | Go LIVE. Runs the live checks against the database: domain attached to the store (live_domain, live_domain_store), a page on every visible step (live_page, live_page_missing), offers belonging to the store and payable — active payment account or COD — (live_offer_store, live_offer_payment), no subscription offer, active workflows, terminal last step (last_terminal). |
pause_funnel |
landings:write |
T1 | Pause a live funnel: every /f URL answers 404 until published again. |
unpublish_funnel |
landings:write |
T1 | Back to draft: served only with the signed preview link from preview_funnel. |
delete_funnel |
landings:write |
T2 | Delete a funnel (refused while live — pause first — and while buyers are still inside an upsell window: retry once it closes). |
preview_funnel |
landings:read |
T1 | Openable URLs of the funnel on its domain: the entry step and every step. |
get_funnel_stats |
landings:read |
T1 | Funnel analytics: traffic per step, money from orders (net of refunds), A/B variants with a two-proportion z-test, and the entry-source breakdown (smartlink / campaign / source / direct). |
manage_funnel_postbacks |
landings:write |
T1 | List, create, update or delete a funnel's postbacks (notify an affiliate network on each conversion). |
insert_funnel_template |
landings:write |
T1 | Insert a shipped template INTO an existing funnel — its steps AND its pages. |
attach_landing_to_funnel |
landings:write |
T1 | Attach an EXISTING landing page (type local or ai) to a funnel: either replace the page of an existing step (step_id) or append a new step at the end (type: optin | presell | sales | checkout | upsell | thankyou; a checkout/upsell needs offer_ids — a checkout defaults to the page's native_offer_id). |
detach_landing_from_funnel |
landings:write |
T1 | Detach a landing page from a funnel step. |
get_landing_funnels |
landings:read |
T1 | Which funnels serve these landing pages, and in which role: for each landing_id, the list of {funnel_id, funnel_name, funnel_status, step_id, step_slug, step_type, position, role, via: step|variant}. |
get_funnel_journal |
landings:read |
T1 | What a funnel's automations actually did: the e-mail sequences it enrolled (per step and outcome, with enrol / exit-on-purchase / failure state) and the postbacks that will not go through on their own (abandoned after 8 attempts, or definitively refused). |
declare_funnel_variant_winner |
landings:write |
T1 | Mark one A/B variant of a step as the winner (timestamps winner_declared_at). |
get_funnels_by_entry |
landings:read |
T1 | The funnels fed by one entry source — a smartlink, a campaign or a traffic source — with sessions, orders and NET revenue (refunds deducted, bots excluded, previews excluded). |
propose_funnel |
landings:write |
T1 | Describe what you want to sell, in one sentence; get a funnel proposal back. |
merchandising-tools
Ce qui fait qu'une boutique ressemble à une boutique : le prix de référence derrière le prix barré et le badge -N %, les pastilles de couleur des options, la marque et les tags. Tout s'écrit par le module qui affiche la vitrine : une valeur qui produirait un badge absurde est refusée à l'écriture — un compare_at_price qui ne dépasse pas le prix de vente, par exemple. set_product_options régénère la matrice des variantes.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
get_product_merchandising |
products:read |
T1 | What the storefront actually shows for a native product: sale state, discount percent, per-variant pricing, option swatches and the badges that will render. |
set_product_merchandising |
products:write |
T1 | Set the reference ("was") price, brand, tags or category of a native product. |
set_product_options |
products:write |
T1 | Define a native product's option axes (max 3) and their values. |
set_variant_pricing |
products:write |
T1 | Set price and/or reference price per variant, so a sale can apply to one size only. |
store-tools
Les boutiques hébergées par Trackily (« Storefronts » dans l'admin) : les créer, y pointer un ou plusieurs domaines, les dupliquer, les exporter vers une autre installation. Un nom qui dit native_store vise toujours une boutique native (list_native_stores, create_native_store, set_native_store_theme…), mais tous les outils de ce module ne le disent pas : les codes d'export (*_store_export_code*, import_store_from_code) et reset_demo_store portent eux aussi sur les boutiques natives. À l'inverse, list_stores, get_store_detail et test_store_connection visent les boutiques externes connectées (ecommerce-tools).
Trois règles à connaître : une boutique qui a vendu ne se supprime pas, elle s'archive ; la duplication par marché ne convertit jamais une devise — plan_market_duplication liste chaque prix à fixer avant de créer quoi que ce soit ; un code d'export TRKX1 emporte produits, offres, landings et funnels, jamais les comptes de paiement, les commandes, les clients ni les domaines.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_native_stores |
stores:read |
T1 | List the operator's own storefronts — NOT the Shopify integrations that list_stores returns. |
get_native_store |
stores:read |
T1 | One storefront in detail: its domains, paid-order totals over a window, its best-earning products, its offers with bundle and landing counts, recent orders, and what is still missing before it can sell. |
create_native_store |
stores:write |
T1 | Create a Trackily-hosted storefront. |
update_native_store |
stores:write |
T1 | Rename a storefront, change its currency, set the branding its pages wear, or take it offline with is_active:false. |
reset_demo_store |
stores:write |
T1 | Rebuild the demo storefront from code — six products with copy, pictures, a colour swatch and a digital line, plus two offers with bundle images and badges. |
plan_market_duplication |
offers:read |
T1 | Read what a market copy of a product or an offer would need PRICED, before creating anything. |
duplicate_product_for_market |
offers:write |
T1 | Copy a product (variants, options, images, checkout fields, shipping rules) into a NEW draft product for another market. |
duplicate_offer_for_market |
offers:write |
T1 | Copy an offer (bundles, items, forced prices, positions, payment options) into a NEW offer for another market. |
duplicate_native_store |
stores:write |
T1 | Copy a storefront's settings — name, currency, theme, picture — into a new one. |
delete_native_store |
stores:write |
T2 | Permanently remove a storefront that never sold anything. |
attach_domain_to_native_store |
stores:write |
T1 | Point a domain at a storefront. |
detach_domain_from_native_store |
stores:write |
T1 | Stop serving a storefront on a domain. |
set_native_store_theme |
stores:write |
T1 | Bind a theme to a storefront. |
bulk_native_stores |
stores:write |
T2 | Apply one action to several storefronts at once: pause / resume (domains stop or resume serving), archive / unarchive (leaves every list and picker; past orders keep resolving to it), duplicate (the shell only — name, currency, theme, picture; never the catalogue or domains) or delete (refused as soon as one order carries the store — archive instead). |
import_commerce_asset |
stores:write |
T1 | Copy an image from a public URL into the shop's own asset store and return the LOCAL url to use in landing HTML (/commerce-assets/<id>/<file>). |
create_store_export_code |
stores:write |
T1 | Create a STORE EXPORT CODE — a single paste-able code that lets ANOTHER Trackily installation import this store WHOLE: products (options + variants), offers (bundles + lines), landing pages and funnels. |
list_store_export_codes |
stores:read |
T1 | List store export codes — label, uses/max, expiry, revoked, and the USAGE TRAIL (when, declared target origin, ip). |
revoke_store_export_code |
stores:write |
T1 | Revoke a store export code — it stops working immediately, even if it had uses left. |
reveal_store_export_code |
stores:write |
T1 | Reveal the FULL export code of a saved row (stored encrypted at rest; every reveal is logged). |
update_store_export_code |
stores:write |
T1 | Edit a store export code: label, max_uses (null = unlimited), expires_days (null = never), active (false = deactivate, true = reactivate). |
import_store_from_code |
stores:write |
T1 | Import a WHOLE store from a TRKX1 export code — products, offers, landing pages, funnels — created on this installation with all ids remapped. |
offer-tools
Les offres COMMERCE : ce qui se vend dans la boutique native (« Offers-EC » dans l'admin). Rien à voir avec les offres d'affiliation (list_offers, update_offer_payout). Dans ce module, les noms disent native_offer, sauf diagnose_storefront_offers ; hors du module, plan_market_duplication (avec type: "offer") et duplicate_offer_for_market (store-tools) prennent eux aussi une offre commerce sans le dire dans leur nom. Une offre est l'unité vendue — sa composition, son prix, sa livraison. Un produit seul EST une offre : une offre automatique naît avec chaque produit, et list_native_offers la cache sauf include_auto. attach_native_offer_to_landing injecte la zone d'achat dans une page que tu écris toi-même : place <div id="trackily-checkout"></div> là où elle doit apparaître.
| Outil | Scopes | Tier | Description |
|---|---|---|---|
list_native_offers |
products:read |
T1 | List COMMERCE offers — what you sell in your own store. |
get_native_offer |
products:read |
T1 | Full detail of a commerce offer: its composition, per-line fulfilment type, and the stores it is attached to. |
create_native_offer |
products:write |
T1 | Create a commerce offer (bundle, promo pack, upsell). |
update_native_offer |
products:write |
T1 | Change a commerce offer's HEADER: name, description, currency, store_id, image_url, is_active, is_storefront_visible. |
add_native_offer_item |
products:write |
T1 | Add a product to an offer. |
remove_native_offer_item |
products:write |
T1 | Remove a line from an offer. |
attach_native_offer_to_store |
stores:write |
T1 | Make an offer available on a store, optionally at a local price. |
bulk_native_offers |
products:write |
T2 | Apply one action to several commerce offers at once: activate, deactivate (the offer stays, stops selling everywhere, keeps its history — this is how you archive), or delete. |
delete_native_offer |
products:write |
T2 | Delete a commerce offer. Two-step: the first call previews how many order lines reference it and how many stores carry it, plus a confirm_token to pass back. |
create_native_offer_bundle |
products:write |
T1 | Add a purchasable shape to a COMMERCE offer — "1 flacon", "3 flacons", "pack duo". |
update_native_offer_bundle |
products:write |
T1 | Change a bundle's name, price, badge, order or default flag. |
set_native_offer_bundle_items |
products:write |
T1 | Replace what is inside a bundle: several units of one product, or a combination of different products, each with its own unit_price inside this bundle. |
delete_native_offer_bundle |
products:write |
T1 | Remove a bundle and its items from a commerce offer. |
set_native_offer_payment_options |
products:write |
T1 | Which payment methods the offer's landing page accepts: card accounts and/or cash on delivery. |
attach_native_offer_to_landing |
landings:write |
T1 | Bind an existing landing page to a COMMERCE offer, so its bundle stack, quantity selector and checkout are injected into the page. |
diagnose_storefront_offers |
products:read |
T1 | Why an offer does or does not appear on a shop front. |
Total : 339 outils
| Module | Outils | dont T2 |
|---|---|---|
| resources | 12 | 0 |
| actions | 17 | 6 |
| source-actions | 6 | 2 |
| meta-tools | 9 | 1 |
| content-tools | 15 | 6 |
| workflow-tools | 8 | 4 |
| ecommerce-tools | 10 | 4 |
| ecommerce-orders-tools | 14 | 7 |
| ecommerce-analytics-tools | 13 | 2 |
| ecommerce-marketing-tools | 17 | 8 |
| ecommerce-content-tools | 15 | 6 |
| ecommerce-orchestration-tools | 8 | 2 |
| native-commerce-tools | 15 | 9 |
| native-orders-tools | 8 | 4 |
| email-tools | 26 | 2 |
| whatsapp-tools | 47 | 9 |
| smartlinks-tools | 9 | 3 |
| platform-tools | 12 | 3 |
| payment-tools | 2 | 0 |
| truth-tools | 3 | 0 |
| theme-tools | 7 | 1 |
| funnel-tools | 25 | 2 |
| merchandising-tools | 4 | 0 |
| store-tools | 21 | 2 |
| offer-tools | 16 | 2 |
| Total | 339 | 85 |
Voir aussi
- Index — vue d'ensemble du système MCP
- Concept — le protocole JSON-RPC
- Tokens — créer le jeton
- Scopes — la granularité des permissions
- Tier System — aperçu + confirm_token