io.aeotool/mcp
io.aeotool/mcpaeotool.iostreamable-httpv1.0.0Scanned
Pilot AEO/GEO from Claude: bulk audits, server-side fixes via WordPress plugin, AI citations.
36 tools: 2 can delete or cancel things, 28 change things and 6 only read.
- Reads private data · 1
- Reads text others write · 26
- Can send data out · 3
- 3 findings
Tools listed without sign-in. Remote posture
Anlyon alternative
30 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
36 tools
Deletes or cancels 2Claude Code: deny
ads_remove_criterionECRITURE GARDEE.Reads text others writeNo findings
Why it is in this group
- The name "ads_remove_criterion" says "remove": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Retirer un critere de ciblage
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
ads_update_budgetÉCRITURE GARDÉE : modifie le budget quotidien d’une campagne.Reads text others writeNo findings
Why it is in this group
- The name "ads_update_budget" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it É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é.
Annotations the server declares
- title: Modifier le budget quotidien d’une campagne
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
Changes things 28Claude Code: ask
ads_ad_statusÉCRITURE GARDÉE : met une annonce individuelle en pause ou la réactive (réversible).Reads text others write1 finding
Why it is in this group
- The name "ads_ad_status" says "status": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "ads_ad_status" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "ads_ad_status" says "status": a word for reading.
Description, as the server wrote it É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é.
Annotations the server declares
- title: Pause / réactivation d’annonce
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
ads_add_keywordsÉCRITURE GARDÉE : ajoute des mots-clés POSITIFS (1-20) à un groupe d’annonces.Reads text others writeNo findings
Why it is in this group
- The name "ads_add_keywords" says "add": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it É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é.
Annotations the server declares
- title: Ajouter des mots-clés
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ads_add_locationECRITURE GARDEE.Reads text others writeNo findings
Why it is in this group
- The name "ads_add_location" says "add": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Ajouter ou exclure une zone
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ads_add_negative_keywordsÉCRITURE GARDÉE : ajoute des mots-clés négatifs (1-50) à une campagne.Reads text others writeNo findings
Why it is in this group
- The name "ads_add_negative_keywords" says "add": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it É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.
Annotations the server declares
- title: Ajouter des mots-clés négatifs
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
ads_asset_performanceNote Google de chaque titre et description d'annonce responsive (LOW / GOOD / BEST / en cours d'evaluation).Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Performance des accroches RSA
- readOnlyHint: true
- openWorldHint: true
ads_attach_audienceECRITURE GARDEE.Reads text others writeNo findings
Why it is in this group
- The name "ads_attach_audience" says "attach": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Rattacher une audience
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ads_audiencesListes de remarketing disponibles et leur taille, avec celles qui atteignent le seuil de diffusion sur le reseau de recherche (~1 000 utilisateurs).Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Listes de remarketing disponibles et leur taille, avec celles qui atteignent le seuil de diffusion sur le reseau de recherche (~1 000 utilisateurs). Gratuit.
Annotations the server declares
- title: Listes d audience du compte
- readOnlyHint: true
- openWorldHint: true
ads_auditAudit complet du compte Google Ads : score /100, grade, € gaspillés/mois, manque à gagner, quick wins par catégorie (tracking, gaspillage, enchères, structure, RSA…).Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Audit Google Ads (19 critères)
- readOnlyHint: true
- openWorldHint: true
ads_campaign_criteriaZones, appareils et plages horaires cibles par les campagnes, avec leur ajustement d'enchere actuel et leur criterion_id.Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Criteres de ciblage
- readOnlyHint: true
- openWorldHint: true
ads_campaign_statusÉCRITURE GARDÉE : met une campagne en pause ou la réactive (réversible).Reads text others write1 finding
Why it is in this group
- The name "ads_campaign_status" says "status": a word for reading.
- The server marks it as not read-only (readOnlyHint: false).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Warn
The server marks "ads_campaign_status" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "ads_campaign_status" says "status": a word for reading.
Description, as the server wrote it É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é.
Annotations the server declares
- title: Pause / réactivation de campagne
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
ads_change_historyQui a change quoi et quand sur le compte (30 jours max, retention Google).Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Historique des modifications Ads
- readOnlyHint: true
- openWorldHint: true
ads_device_performanceCout, conversions et cout par conversion par appareil (mobile, ordinateur, tablette).Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Cout, conversions et cout par conversion par appareil (mobile, ordinateur, tablette). Prealable a tout ajustement d'enchere par appareil. Gratuit.
Annotations the server declares
- title: Performance par appareil
- readOnlyHint: true
- openWorldHint: true
ads_geo_performancePerformance par zone REELLE de l'internaute (ville / region), libelles resolus, avec les zones qui depensent sans convertir.Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Performance par zone geographique
- readOnlyHint: true
- openWorldHint: true
ads_keywordsMots-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).Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Mots-clés Ads (avec ids)
- readOnlyHint: true
- openWorldHint: true
ads_landing_pagesPerformance 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.Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Performance par page de destination
- readOnlyHint: true
- openWorldHint: true
ads_pause_keywordÉCRITURE GARDÉE : met un mot-clé en pause (réversible dans Google Ads).Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it É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é.
Annotations the server declares
- title: Mettre un mot-clé en pause
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
ads_performancePerformance 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.Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Performance des campagnes Ads
- readOnlyHint: true
- openWorldHint: true
ads_quality_breakdownDecompose 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 DOMIN…Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Quality Score decompose
- readOnlyHint: true
- openWorldHint: true
ads_set_bid_modifierECRITURE GARDEE.Reads text others writeNo findings
Why it is in this group
- The name "ads_set_bid_modifier" says "set": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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).
Annotations the server declares
- title: Ajuster une enchere
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
aeo_applyAPPLIQUE 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 prochai…No findings
Why it is in this group
- The name "aeo_apply" says "apply": a word for a change.
Description, as the server wrote it 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).
Annotations the server declares
- title: Appliquer les correctifs
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
aeo_auditLance un audit AEO/GEO d’une URL (asynchrone, ~2 min) et renvoie immédiatement l’audit_id.Reads text others writeCan send data outNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it 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.
Annotations the server declares
- title: Auditer une URL (AEO/GEO)
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
aeo_batch_auditLance l’audit de plusieurs sites en une commande (le « killer agence »), en asynchrone : renvoie immédiatement un audit_id par URL.Reads text others writeCan send data outNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a URL (input.urls): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it 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.
Annotations the server declares
- title: Auditer plusieurs sites
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
aeo_citationsHistorique de citation d’un domaine dans les moteurs IA : taux de citation par date, détail par moteur, part de voix.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Historique de citations IA
- readOnlyHint: true
- openWorldHint: false
aeo_generateGénère (sans appliquer) un artefact AEO, déterministe et gratuit.Can send data out1 finding
Why it is in this group
- The name "aeo_generate" says "generate": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Findings
- Warn
The server marks "aeo_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "aeo_generate" says "generate": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Générer un artefact AEO
- readOnlyHint: true
- openWorldHint: false
aeo_improvementsLa 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é.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Checklist d’améliorations
- readOnlyHint: true
- openWorldHint: false
aeo_monitorProgramme un scan de citations récurrent côté serveur (10 moteurs IA, part de voix vs watchlist, alertes email).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it 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.
Annotations the server declares
- title: Monitoring citations programmé
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
aeo_proofLa 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.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Preuve avant/après d’un domaine
- readOnlyHint: true
- openWorldHint: false
aeo_reportRenvoie le détail complet d’un audit existant (par audit_id) : score global, scores par catégorie et tous les critères (score + recommandation).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Description, as the server wrote it 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.
Annotations the server declares
- title: Détail d’un audit
- readOnlyHint: true
- openWorldHint: false
Only reads 6Show 6 read-only tools
ads_geo_target_searchTrouve l'identifiant Google d'une zone a partir de son nom (ville, departement, region) : seule forme acceptee par ads_add_location.Reads text others writeNo findings
Why it is in this group
- The name "ads_geo_target_search" says "search": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Trouve l'identifiant Google d'une zone a partir de son nom (ville, departement, region) : seule forme acceptee par ads_add_location. Gratuit.
Annotations the server declares
- title: Chercher une zone geographique
- readOnlyHint: true
- openWorldHint: true
ads_list_accountsListe 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 dan…Reads private dataNo findings
Why it is in this group
- The name "ads_list_accounts" says "list": a word for reading.
What it can reach
- private-dataThe description's first sentence says "table": it reads databases.
Description, as the server wrote it 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).
Annotations the server declares
- title: Comptes Google Ads connectés
- readOnlyHint: true
- openWorldHint: false
ads_list_adsAnnonces (RSA…) avec métriques N jours et ids (ad_group_id + ad_id) nécessaires à ads_ad_status.Reads text others writeNo findings
Why it is in this group
- The name "ads_list_ads" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it Annonces (RSA…) avec métriques N jours et ids (ad_group_id + ad_id) nécessaires à ads_ad_status. Gratuit.
Annotations the server declares
- title: Annonces du compte
- readOnlyHint: true
- openWorldHint: true
ads_search_termsTermes 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.Reads text others writeNo findings
Why it is in this group
- The name "ads_search_terms" says "search": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Termes de recherche Ads
- readOnlyHint: true
- openWorldHint: true
aeo_audit_statusStatut d’un audit lancé par aeo_audit : pending/processing → completed (avec le score) ou failed.No findings
Why it is in this group
- The name "aeo_audit_status" says "status": a word for reading.
Description, as the server wrote it Statut d’un audit lancé par aeo_audit : pending/processing → completed (avec le score) ou failed. Gratuit : poll toutes les 20-30 s.
Annotations the server declares
- title: Statut d’un audit
- readOnlyHint: true
- openWorldHint: false
aeo_list_sitesListe les sites WordPress connectés au compte (plugin Everlange Connect) : domaine, statut, modules actifs, version du bundle.No findings
Why it is in this group
- The name "aeo_list_sites" says "list": a word for reading.
Description, as the server wrote it Liste les sites WordPress connectés au compte (plugin Everlange Connect) : domaine, statut, modules actifs, version du bundle.
Annotations the server declares
- title: Lister les sites connectés
- readOnlyHint: true
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
78 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 private-data tool breaks every one.
- Reads private data1
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write26
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out3
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__aeotool__ads_list_accounts"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Oct 22, 2026, 14:49 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 200
- tools/list served without credentials
- yes
- Tools that change things, listed without credentials
- 30
- Protocol version
- 2025-06-18
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- not observed
- RFC 9728 protected resource metadata
- https://aeotool.io/.well-known/oauth-protected-resource/api/mcp
- Authorization servers
- https://aeotool.io
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- yes
- Client ID metadata documents
- no
- HighThe whole server
The endpoint served tools/list without credentials, and the list has 30 tools that change things (2 destructive, 28 write). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://aeotool.io/api/mcp: tools/list returned 36 tools to an anonymous client, including ads_remove_criterion (destructive), ads_update_budget (destructive), aeo_audit (write), aeo_batch_audit (write), aeo_report (write) and 25 more
Findings
Matches of fixed checks, with the text they matched.
- Warnaeo_generate
The server marks "aeo_generate" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"openWorldHint":false}; The name "aeo_generate" says "generate": a word for a change.
The server marks "ads_campaign_status" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "ads_campaign_status" says "status": a word for reading.
- Warnads_ad_status
The server marks "ads_ad_status" as not read-only (readOnlyHint: false), and its words say it reads.
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}; The name "ads_ad_status" says "status": a word for reading.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http aeotool https://aeotool.io/api/mcpclaude mcp add --transport http aeotool https://aeotool.io/api/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__aeotool__aeo_list_sites",
"mcp__aeotool__aeo_audit_status",
"mcp__aeotool__ads_list_accounts",
"mcp__aeotool__ads_search_terms",
"mcp__aeotool__ads_geo_target_search",
"mcp__aeotool__ads_list_ads"
],
"ask": [
"mcp__aeotool__aeo_audit",
"mcp__aeotool__aeo_batch_audit",
"mcp__aeotool__aeo_report",
"mcp__aeotool__aeo_improvements",
"mcp__aeotool__aeo_generate",
"mcp__aeotool__aeo_apply",
"mcp__aeotool__aeo_citations",
"mcp__aeotool__aeo_proof",
"mcp__aeotool__aeo_monitor",
"mcp__aeotool__ads_performance",
"mcp__aeotool__ads_change_history",
"mcp__aeotool__ads_quality_breakdown",
"mcp__aeotool__ads_landing_pages",
"mcp__aeotool__ads_geo_performance",
"mcp__aeotool__ads_asset_performance",
"mcp__aeotool__ads_campaign_criteria",
"mcp__aeotool__ads_audiences",
"mcp__aeotool__ads_device_performance",
"mcp__aeotool__ads_set_bid_modifier",
"mcp__aeotool__ads_add_location",
"mcp__aeotool__ads_attach_audience",
"mcp__aeotool__ads_keywords",
"mcp__aeotool__ads_audit",
"mcp__aeotool__ads_add_negative_keywords",
"mcp__aeotool__ads_pause_keyword",
"mcp__aeotool__ads_campaign_status",
"mcp__aeotool__ads_ad_status",
"mcp__aeotool__ads_add_keywords"
],
"deny": [
"mcp__aeotool__ads_remove_criterion",
"mcp__aeotool__ads_update_budget"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as aeotool. Review it before you use it.
Capability tags behind 28 rules
- mcp__aeotool__aeo_audit untrusted-input, outbound
- mcp__aeotool__aeo_batch_audit untrusted-input, outbound
- mcp__aeotool__aeo_generate outbound
- mcp__aeotool__ads_list_accounts private-data
- mcp__aeotool__ads_performance untrusted-input
- mcp__aeotool__ads_search_terms untrusted-input
- mcp__aeotool__ads_change_history untrusted-input
- mcp__aeotool__ads_quality_breakdown untrusted-input
- mcp__aeotool__ads_landing_pages untrusted-input
- mcp__aeotool__ads_geo_performance untrusted-input
- mcp__aeotool__ads_asset_performance untrusted-input
- mcp__aeotool__ads_campaign_criteria untrusted-input
- mcp__aeotool__ads_geo_target_search untrusted-input
- mcp__aeotool__ads_audiences untrusted-input
- mcp__aeotool__ads_device_performance untrusted-input
- mcp__aeotool__ads_set_bid_modifier untrusted-input
- mcp__aeotool__ads_add_location untrusted-input
- mcp__aeotool__ads_remove_criterion untrusted-input
- mcp__aeotool__ads_attach_audience untrusted-input
- mcp__aeotool__ads_keywords untrusted-input
- mcp__aeotool__ads_audit untrusted-input
- mcp__aeotool__ads_add_negative_keywords untrusted-input
- mcp__aeotool__ads_pause_keyword untrusted-input
- mcp__aeotool__ads_update_budget untrusted-input
- mcp__aeotool__ads_campaign_status untrusted-input
- mcp__aeotool__ads_list_ads untrusted-input
- mcp__aeotool__ads_ad_status untrusted-input
- mcp__aeotool__ads_add_keywords untrusted-input
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/io.aeotool/mcp/verify?hash=c55026402c26cb90d37754c1194f5fa72ce41a1908997bc61e1e8cb0a00a401e" | jq -e '.changed == false'Pinned hash c55026402c26, from Oct 21, 2026, 19:01 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/io.aeotool/mcp/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/io.aeotool/mcp)Source: MCP Registry. Synced Oct 21, 2026, 18:13 UTC.