addrbookFor publishers
← The evidence ledger

Evidence row 568846

Observed , by probe.mcp/1.

Kind
mcp.tools
About
endpoint 1b99524a-a5a6-4b9b-b671-eb6fd60bbb97
Recorded
Previous row
None: the first of its kind about this subject
Body SHA-256
b9149ab983f74bcb68c3f42c67b3f1ab64021c4394889d8ec90a8e2300765512
Leaf
0x77fc437328307a4df45ab6f71c0a5bcb3116f47db8b3db76ee6ed89bcba67eda

What was observed

{
  "count": 36,
  "tools": [
    {
      "description": "ÉCRITURE GARDÉE : met une annonce individuelle en pause ou la réactive (réversible). ids via ads_list_ads. Dry-run Google puis confirm:true. Pilotage requis (write_enabled) ; journalisé.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "ad_group_id": {
            "description": "Groupe d’annonces (voir ads_list_ads)",
            "type": "string"
          },
          "ad_id": {
            "description": "Id de l’annonce (voir ads_list_ads)",
            "type": "string"
          },
          "confirm": {
            "description": "true = appliquer (après dry-run)",
            "type": "boolean"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "status": {
            "description": "PAUSED ou ENABLED",
            "type": "string"
          }
        },
        "required": [
          "ad_group_id",
          "ad_id",
          "status"
        ],
        "type": "object"
      },
      "name": "ads_ad_status"
    },
    {
      "description": "ÉCRITURE GARDÉE : ajoute des mots-clés POSITIFS (1-20) à un groupe d’annonces. ad_group_id via ads_keywords. Dry-run Google puis confirm:true. Pilotage requis (write_enabled) ; journalisé.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "ad_group_id": {
            "description": "Groupe d’annonces cible",
            "type": "string"
          },
          "confirm": {
            "description": "true = appliquer (après dry-run)",
            "type": "boolean"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "keywords": {
            "description": "1-20 mots-clés",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "match_type": {
            "description": "EXACT | PHRASE | BROAD (défaut EXACT)",
            "type": "string"
          }
        },
        "required": [
          "ad_group_id",
          "keywords"
        ],
        "type": "object"
      },
      "name": "ads_add_keywords"
    },
    {
      "description": "ECRITURE GARDEE. Ajoute une zone au ciblage d'une campagne, ou l'exclut avec negative:true. L'identifiant s'obtient avec ads_geo_target_search. Dry-run valide par Google d'abord ; confirm:true pour appliquer.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "campaign_id": {
            "description": "Campagne cible",
            "type": "string"
          },
          "confirm": {
            "description": "true pour appliquer reellement",
            "type": "boolean"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "geo_target_resource_name": {
            "description": "Format geoTargetConstants/<id>",
            "type": "string"
          },
          "negative": {
            "description": "true = exclure la zone",
            "type": "boolean"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_add_location"
    },
    {
      "description": "ÉCRITURE GARDÉE : ajoute des mots-clés négatifs (1-50) à une campagne. Sans confirm:true : dry-run validé par Google (rien n’est appliqué). Nécessite le pilotage activé pour ce compte (ads_list_accounts → write_enabled). Chaque application est journalisée.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "campaign_id": {
            "description": "Campagne cible (voir ads_performance)",
            "type": "string"
          },
          "confirm": {
            "description": "false/absent = dry-run ; true = appliquer",
            "type": "boolean"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "keywords": {
            "description": "1-50 termes à exclure",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "match_type": {
            "description": "EXACT (défaut) | PHRASE | BROAD",
            "type": "string"
          }
        },
        "required": [
          "campaign_id",
          "keywords"
        ],
        "type": "object"
      },
      "name": "ads_add_negative_keywords"
    },
    {
      "description": "Note Google de chaque titre et description d'annonce responsive (LOW / GOOD / BEST / en cours d'evaluation). Remplacer les LOW par des variantes des BEST est l'optimisation creative la moins risquee : elle ne touche ni enchere ni budget, donc ne relance pas l'apprentissage. Gratuit, lecture seule.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Periode en jours (defaut 30)",
            "type": "number"
          },
          "limit": {
            "description": "Max lignes (defaut 100, max 300)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_asset_performance"
    },
    {
      "description": "ECRITURE GARDEE. Rattache une liste de remarketing a une campagne. Mode observation par defaut : la diffusion NE CHANGE PAS, l'audience est seulement mesuree. Le mode targeting restreint la diffusion aux seuls membres de la liste et peut effondrer le volume : il doit etre demande explicitement. Dry-run valide par Google d'abord ; confirm:true pour appliquer.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "campaign_id": {
            "description": "Campagne cible",
            "type": "string"
          },
          "confirm": {
            "description": "true pour appliquer reellement",
            "type": "boolean"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "mode": {
            "description": "observation (defaut) ou targeting",
            "type": "string"
          },
          "user_list_resource_name": {
            "description": "Format customers/<cid>/userLists/<id> (voir ads_audiences)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_attach_audience"
    },
    {
      "description": "Listes de remarketing disponibles et leur taille, avec celles qui atteignent le seuil de diffusion sur le reseau de recherche (~1 000 utilisateurs). Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_audiences"
    },
    {
      "description": "Audit complet du compte Google Ads : score /100, grade, € gaspillés/mois, manque à gagner, quick wins par catégorie (tracking, gaspillage, enchères, structure, RSA…). Lecture seule, gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_audit"
    },
    {
      "description": "Zones, appareils et plages horaires cibles par les campagnes, avec leur ajustement d'enchere actuel et leur criterion_id. Lecture prealable indispensable a ads_set_bid_modifier et ads_remove_criterion. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "campaign_id": {
            "description": "Limiter a une campagne (optionnel)",
            "type": "string"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_campaign_criteria"
    },
    {
      "description": "ÉCRITURE GARDÉE : met une campagne en pause ou la réactive (réversible). Sans confirm:true : dry-run validé par Google. Pilotage requis (write_enabled) ; journalisé.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "campaign_id": {
            "description": "Campagne cible (voir ads_performance)",
            "type": "string"
          },
          "confirm": {
            "description": "true = appliquer (après dry-run)",
            "type": "boolean"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel : défaut : le plus récent)",
            "type": "string"
          },
          "status": {
            "description": "PAUSED ou ENABLED",
            "type": "string"
          }
        },
        "required": [
          "campaign_id",
          "status"
        ],
        "type": "object"
      },
      "name": "ads_campaign_status"
    },
    {
      "description": "Qui a change quoi et quand sur le compte (30 jours max, retention Google). Signale les changements de budget ou d'encheres qui ont pu RELANCER la phase d'apprentissage : les metriques anterieures ne sont alors plus comparables. Gratuit, lecture seule.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Periode en jours (defaut 14, max 29)",
            "type": "number"
          },
          "limit": {
            "description": "Max lignes (defaut 100, max 200)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_change_history"
    },
    {
      "description": "Cout, conversions et cout par conversion par appareil (mobile, ordinateur, tablette). Prealable a tout ajustement d'enchere par appareil. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Periode en jours (defaut 30)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_device_performance"
    },
    {
      "description": "Performance par zone REELLE de l'internaute (ville / region), libelles resolus, avec les zones qui depensent sans convertir. Determinant pour une activite a zone de chalandise. Gratuit, lecture seule.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Periode en jours (defaut 30)",
            "type": "number"
          },
          "limit": {
            "description": "Max lignes (defaut 50, max 200)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_geo_performance"
    },
    {
      "description": "Trouve l'identifiant Google d'une zone a partir de son nom (ville, departement, region) : seule forme acceptee par ads_add_location. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "country_code": {
            "description": "Code pays ISO, defaut FR",
            "type": "string"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "query": {
            "description": "Nom de la zone, ex. Nimes",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_geo_target_search"
    },
    {
      "description": "Mots-clés actifs avec leurs métriques (N jours) et les ids nécessaires aux actions (ad_group_id + criterion_id pour ads_pause_keyword). Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Période en jours (défaut 30)",
            "type": "number"
          },
          "limit": {
            "description": "Max lignes (défaut 100, max 300)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_keywords"
    },
    {
      "description": "Performance de chaque page de destination (cout, clics, conversions, taux de conversion) et liste des pages qui ont recu au moins 10 clics payants SANS une seule conversion. Ces URLs sont directement auditables avec aeo_audit : le diagnostic de citabilite et celui de conversion se recoupent. Gratuit, lecture seule.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Periode en jours (defaut 30)",
            "type": "number"
          },
          "limit": {
            "description": "Max lignes (defaut 50, max 200)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_landing_pages"
    },
    {
      "description": "Liste les comptes Google Ads connectés au compte aeotool (OAuth) : customer_id, nom, statut, is_manager (MCC, non requêtable directement, ses comptes clients apparaissent aussi dans la liste), write_enabled (pilotage en écriture, activable par compte dans le Cockpit Google Ads).",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "ads_list_accounts"
    },
    {
      "description": "Annonces (RSA…) avec métriques N jours et ids (ad_group_id + ad_id) nécessaires à ads_ad_status. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Période en jours (défaut 30)",
            "type": "number"
          },
          "limit": {
            "description": "1-200, défaut 100",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_list_ads"
    },
    {
      "description": "ÉCRITURE GARDÉE : met un mot-clé en pause (réversible dans Google Ads). ids via ads_keywords. Sans confirm:true : dry-run validé par Google. Pilotage requis (write_enabled) ; journalisé.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "ad_group_id": {
            "description": "Groupe d’annonces (voir ads_keywords)",
            "type": "string"
          },
          "confirm": {
            "description": "false/absent = dry-run ; true = appliquer",
            "type": "boolean"
          },
          "criterion_id": {
            "description": "Id du mot-clé (voir ads_keywords)",
            "type": "string"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          }
        },
        "required": [
          "ad_group_id",
          "criterion_id"
        ],
        "type": "object"
      },
      "name": "ads_pause_keyword"
    },
    {
      "description": "Performance des campagnes Google Ads sur N jours (défaut 30) : impressions, clics, coût, conversions, CTR, CPC moyen, budget/jour : triées par coût. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel : défaut : le plus récent)",
            "type": "string"
          },
          "days": {
            "description": "Période en jours (1-365, défaut 30)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_performance"
    },
    {
      "description": "Decompose le Quality Score de chaque mot-cle en ses trois composantes Google (pertinence de l'annonce, experience sur la page de destination, CTR attendu) et designe la cause DOMINANTE. Un QS bas se corrige par la composante fautive, jamais par l'enchere. Gratuit, lecture seule.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Periode en jours (defaut 30)",
            "type": "number"
          },
          "limit": {
            "description": "Max lignes (defaut 100, max 300)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_quality_breakdown"
    },
    {
      "description": "ECRITURE GARDEE. Retire un critere de ciblage d'une campagne (zone, audience, ajustement). Un retrait se repare en RECREANT le critere, pas en annulant. Dry-run valide par Google d'abord ; confirm:true pour appliquer.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "campaign_id": {
            "description": "Campagne cible",
            "type": "string"
          },
          "confirm": {
            "description": "true pour appliquer reellement",
            "type": "boolean"
          },
          "criterion_id": {
            "description": "Critere a retirer (voir ads_campaign_criteria)",
            "type": "string"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_remove_criterion"
    },
    {
      "description": "Termes de recherche réels ayant déclenché les annonces (N jours, triés par coût) avec le flag wasted=true (coût sans conversion) : candidats directs pour ads_add_negative_keywords. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "days": {
            "description": "Période en jours (défaut 30)",
            "type": "number"
          },
          "limit": {
            "description": "Max lignes (défaut 50, max 200)",
            "type": "number"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_search_terms"
    },
    {
      "description": "ECRITURE GARDEE. Ajuste l'enchere d'un critere existant : 1.0 = aucun ajustement, 1.2 = +20 %, 0.8 = -20 %, 0 = exclusion. Reversible en repassant a 1. Dry-run valide par Google d'abord ; confirm:true pour appliquer. Avertit si une campagne est en phase d'apprentissage (l'action relance le compteur).",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "bid_modifier": {
            "description": "0, ou entre 0.1 et 10",
            "type": "number"
          },
          "campaign_id": {
            "description": "Campagne (voir ads_campaign_criteria)",
            "type": "string"
          },
          "confirm": {
            "description": "true pour appliquer reellement",
            "type": "boolean"
          },
          "criterion_id": {
            "description": "Critere (voir ads_campaign_criteria)",
            "type": "string"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "ads_set_bid_modifier"
    },
    {
      "description": "ÉCRITURE GARDÉE : modifie le budget quotidien d’une campagne. Caps : ±20 % max par appel, plafond absolu (env ADS_MAX_DAILY_BUDGET_EUR, défaut 200 €/j), budgets partagés refusés. Sans confirm:true : dry-run validé par Google. Pilotage requis ; journalisé.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "campaign_id": {
            "description": "Campagne cible (voir ads_performance)",
            "type": "string"
          },
          "confirm": {
            "description": "false/absent = dry-run ; true = appliquer",
            "type": "boolean"
          },
          "customer_id": {
            "description": "Compte Ads (optionnel)",
            "type": "string"
          },
          "new_daily_budget_eur": {
            "description": "Nouveau budget quotidien en euros",
            "type": "number"
          }
        },
        "required": [
          "campaign_id",
          "new_daily_budget_eur"
        ],
        "type": "object"
      },
      "name": "ads_update_budget"
    },
    {
      "description": "APPLIQUE la sélection d’améliorations niveau 1 (jsonld/robots/llms/meta) sur un site connecté : génère + archive les correctifs et bump le bundle → le plugin les injecte au prochain sync. Optionnel : faqs[] (ajoute un FAQPage au JSON-LD), title/description (meta). Le site doit être connecté (aeo_list_sites).",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "description": {
            "description": "optionnel : description meta/OG",
            "type": "string"
          },
          "domain": {
            "description": "domaine du site connecté",
            "type": "string"
          },
          "faqs": {
            "description": "optionnel : Q&A pour le FAQPage (jsonld)",
            "items": {
              "properties": {
                "a": {
                  "type": "string"
                },
                "q": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "improvement_ids": {
            "description": "ids des améliorations (cf. aeo_improvements.autoApplicableIds)",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "description": "optionnel : titre meta/OG",
            "type": "string"
          }
        },
        "required": [
          "domain",
          "improvement_ids"
        ],
        "type": "object"
      },
      "name": "aeo_apply"
    },
    {
      "description": "Lance un audit AEO/GEO d’une URL (asynchrone, ~2 min) et renvoie immédiatement l’audit_id. Suivre avec aeo_audit_status jusqu’à completed, puis aeo_report / aeo_improvements. Coûte 50 GTO, débités à la complétion. NE PAS relancer le même audit pendant qu’un run est en cours.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "url": {
            "description": "URL ou domaine à auditer",
            "type": "string"
          }
        },
        "required": [
          "url"
        ],
        "type": "object"
      },
      "name": "aeo_audit"
    },
    {
      "description": "Statut d’un audit lancé par aeo_audit : pending/processing → completed (avec le score) ou failed. Gratuit : poll toutes les 20-30 s.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "audit_id": {
            "description": "id de l’audit (renvoyé par aeo_audit)",
            "type": "string"
          }
        },
        "required": [
          "audit_id"
        ],
        "type": "object"
      },
      "name": "aeo_audit_status"
    },
    {
      "description": "Lance l’audit de plusieurs sites en une commande (le « killer agence »), en asynchrone : renvoie immédiatement un audit_id par URL. Suivre chaque id avec aeo_audit_status. Coûte 50 GTO par site, débités à la complétion.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "urls": {
            "description": "Liste d’URLs/domaines à auditer",
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "urls"
        ],
        "type": "object"
      },
      "name": "aeo_batch_audit"
    },
    {
      "description": "Historique de citation d’un domaine dans les moteurs IA : taux de citation par date, détail par moteur, part de voix. Renvoie `series[].basis` = \"measured\" ou \"derived\" (dénominateur reconstitué sur les scans anciens, le taux est alors un plancher : voir `caveat`). `share_of_voice` vaut null si aucun concurrent n’est suivi : la part de voix n’est pas mesurable, ce n’est pas 0. Nécessite un Monitoring IA sur ce domaine. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "domain": {
            "description": "domaine à inspecter",
            "type": "string"
          }
        },
        "required": [
          "domain"
        ],
        "type": "object"
      },
      "name": "aeo_citations"
    },
    {
      "description": "Génère (sans appliquer) un artefact AEO, déterministe et gratuit. Types : jsonld, robots, llms, meta, faq (params faqs[]), ai-txt, humans-txt, security-txt, sitemap. jsonld/robots/llms/meta/faq sont applicables (cf. aeo_apply) ; ai-txt/humans-txt/security-txt/sitemap sont à publier par l’agence.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "aiCrawlingPolicy": {
            "description": "ai-txt : politique de crawl IA (défaut allow-with-attribution)",
            "type": "string"
          },
          "contact": {
            "description": "security-txt/ai-txt : email de contact (optionnel)",
            "type": "string"
          },
          "description": {
            "description": "meta : description (optionnel)",
            "type": "string"
          },
          "disclosure": {
            "description": "ai-txt : mention de divulgation de contenu IA (optionnel)",
            "type": "string"
          },
          "faqs": {
            "description": "faq : questions/réponses [{q,a}]",
            "items": {
              "properties": {
                "a": {
                  "type": "string"
                },
                "q": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "language": {
            "description": "security-txt : langues préférées / humans-txt : langue (optionnel)",
            "type": "string"
          },
          "paths": {
            "description": "sitemap : chemins à inclure (optionnel)",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "policy": {
            "description": "security-txt : URL de la politique de sécurité (optionnel)",
            "type": "string"
          },
          "team": {
            "description": "humans-txt : équipe [{name,role}] (optionnel)",
            "items": {
              "properties": {
                "name": {
                  "type": "string"
                },
                "role": {
                  "type": "string"
                }
              },
              "type": "object"
            },
            "type": "array"
          },
          "tech": {
            "description": "humans-txt : technologies (optionnel)",
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "title": {
            "description": "meta : titre (optionnel)",
            "type": "string"
          },
          "type": {
            "description": "type d’artefact",
            "enum": [
              "jsonld",
              "robots",
              "llms",
              "meta",
              "faq",
              "ai-txt",
              "humans-txt",
              "security-txt",
              "sitemap"
            ],
            "type": "string"
          },
          "url": {
            "description": "URL ou domaine cible",
            "type": "string"
          }
        },
        "required": [
          "type",
          "url"
        ],
        "type": "object"
      },
      "name": "aeo_generate"
    },
    {
      "description": "La CHECKLIST d’améliorations d’un audit : groupées par niveau (1=auto-applicable plugin, 2=générable, 3=rebuild/lead), triées par gain projeté. Fournit les ids à passer à aeo_apply. Passer audit_id OU domain (= dernier audit terminé du domaine). Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "audit_id": {
            "description": "id de l’audit (optionnel si domain fourni)",
            "type": "string"
          },
          "domain": {
            "description": "domaine : utilise le dernier audit terminé (alternative à audit_id)",
            "type": "string"
          }
        },
        "required": [],
        "type": "object"
      },
      "name": "aeo_improvements"
    },
    {
      "description": "Liste les sites WordPress connectés au compte (plugin Everlange Connect) : domaine, statut, modules actifs, version du bundle.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {},
        "required": [],
        "type": "object"
      },
      "name": "aeo_list_sites"
    },
    {
      "description": "Programme un scan de citations récurrent côté serveur (10 moteurs IA, part de voix vs watchlist, alertes email). action=create {domain, brand_name?, frequency: daily|weekly|biweekly} · list · delete {schedule_id}. Chaque scan programmé coûte 25 GTO à l’exécution.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "action": {
            "description": "create | list | delete",
            "type": "string"
          },
          "brand_name": {
            "description": "nom de marque (défaut : racine du domaine)",
            "type": "string"
          },
          "domain": {
            "description": "domaine à monitorer (create)",
            "type": "string"
          },
          "frequency": {
            "description": "daily | weekly | biweekly (défaut weekly)",
            "type": "string"
          },
          "schedule_id": {
            "description": "id du schedule (delete)",
            "type": "string"
          }
        },
        "required": [
          "action"
        ],
        "type": "object"
      },
      "name": "aeo_monitor"
    },
    {
      "description": "La PREUVE : compare les 2 derniers audits complétés d’un domaine : delta de score, critères améliorés, critères régressés. L’argument client en un appel. Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "domain": {
            "description": "domaine audité au moins 2 fois",
            "type": "string"
          }
        },
        "required": [
          "domain"
        ],
        "type": "object"
      },
      "name": "aeo_proof"
    },
    {
      "description": "Renvoie le détail complet d’un audit existant (par audit_id) : score global, scores par catégorie et tous les critères (score + recommandation). Gratuit.",
      "inputSchema": {
        "additionalProperties": false,
        "properties": {
          "audit_id": {
            "description": "id de l’audit (renvoyé par aeo_audit)",
            "type": "string"
          }
        },
        "required": [
          "audit_id"
        ],
        "type": "object"
      },
      "name": "aeo_report"
    }
  ]
}

What the leaf hashes

{"body":"b9149ab983f74bcb68c3f42c67b3f1ab64021c4394889d8ec90a8e2300765512","id":568846,"kind":"mcp.tools","method":"probe.mcp/1","observed_us":1793139129480236,"prev":null,"subject":"1b99524a-a5a6-4b9b-b671-eb6fd60bbb97","subject_kind":"endpoint"}

Proof

Fold these into the leaf in order, hashing each sorted pair with keccak256, to reach the root of (273461 rows).

  1. 0x77fd6b12ad1fd27cb090ff467e5de054c13274b153d9fe8f51ba6ab42558daf1
  2. 0xa2dbc1d63ca9a6d7781cf71d922be0803cbaad7a78616fc9aa433b6279cb30a4
  3. 0xc9410ce71e1c8892cedd2724edd1772dc8e6ff21eca418f50b4529dcfd3218d4
  4. 0x9ce822f3b4b75291427ab0cbcac7bb8273ec700c6eb58d3e08e3cf23269a7492
  5. 0xd54a165a876fc9ae82f802ba986fbb44bb4d705d96a96bc70fd9f78bc40481f5
  6. 0x6159a6f063e5707e75faa8495d2ca29e09d9daf216592418280e6f575916b8a1
  7. 0x7e94915c550eca7c102e709cfc5e40120e8a8fba5abc43b62fc38a83c3a776ae
  8. 0x2c887328f9a9c1c76495b896f46e0847bfa9cc87f080d2b135c5c9692733b589
  9. 0x65afd6afa97c5f815f6dbc040d56744fb158b2900f094c1b23dc882a44f17418
  10. 0xa6be59657ccb5e0d8720f5cb3bdc01a8d8c507919f2a5b253feb9ec18a9b57ca
  11. 0x5c178a60ac8a8b1697e714e16bb750246722a6136f279e1719bdab90c149fd7b
  12. 0x30b0c1fa0ae50435d58b5b7f993dde40a8bcc3f5956d7e3d31946f1a957684b4
  13. 0x8f2d125f5fe55a24b5da16577766eeaa13f24a272bb4c1c016f423ae917da681
  14. 0x9848c068b1371232529d2b5738fdc45b854c57da041b69ea7c9e112b14e2d9d1
  15. 0x275720ecabb68df33eee92ae4fd70572a8d952d6c61c061c2869cfc3217aa5c5
  16. 0x23cf9bb4337ee8be7fcae368fd69d24c62c11fb45882127b4cd919bb96a19996
  17. 0x0e01aa9525097570a6edaf32bfc959de57bf5c24317cf10c0716affea85ca60d
  18. 0xa20d48798a34aba12eb9c7297722982d910f06c148f5e27ac59307422964a585
  19. 0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699
Day root
0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795
Chained
0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4
Published
On Arc Testnet, block 69414147: 0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4

How to check it · This row as JSON