# io.aeotool/mcp (remote · aeotool.io)

Pilot AEO/GEO from Claude: bulk audits, server-side fixes via WordPress plugin, AI citations.

- Trust score: 80/100 (high trust)
- Change this week: +8
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `aeotool.io`: 80/100 (this document), [markdown](https://verifymcp.io/servers/io-aeotool-mcp/api-mcp.md), [page](https://verifymcp.io/servers/io-aeotool-mcp/api-mcp)

## Channel facts

- Endpoint: `https://aeotool.io/api/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 94/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
  - The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2735 tokens (~118/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http io-aeotool-mcp https://aeotool.io/api/mcp
```

### Codex

```toml
[mcp_servers.io-aeotool-mcp]
url = "https://aeotool.io/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "io-aeotool-mcp": {
      "type": "remote",
      "url": "https://aeotool.io/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add io-aeotool-mcp --url https://aeotool.io/api/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  io-aeotool-mcp:
    url: "https://aeotool.io/api/mcp"
```

### Other

```json
{
  "mcpServers": {
    "io-aeotool-mcp": {
      "type": "http",
      "url": "https://aeotool.io/api/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 80, +1)

No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-31 (score 79, +6)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 73, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 73, 0)

- [security] Tool “aeo_citations” rewrote its description, which is the text the model reads

### 2026-07-28 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-07-27 (score 72, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 72)

First indexed and scored.

## MCP tools (23)

### `aeo_list_sites` (~37 tokens)

Lister les sites connectés

Liste les sites WordPress connectés au compte (plugin Everlange Connect) : domaine, statut, modules actifs, version du bundle.

### `aeo_audit` (~105 tokens)

Auditer une URL (AEO/GEO)

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.

Input parameters:

- `url` (string, required): URL ou domaine à auditer

### `aeo_audit_status` (~69 tokens)

Statut d’un audit

Statut d’un audit lancé par aeo_audit : pending/processing → completed (avec le score) ou failed. Gratuit — poll toutes les 20-30 s.

Input parameters:

- `audit_id` (string, required): id de l’audit (renvoyé par aeo_audit)

### `aeo_batch_audit` (~88 tokens)

Auditer plusieurs sites

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.

Input parameters:

- `urls` (array, required): Liste d’URLs/domaines à auditer

### `aeo_report` (~65 tokens)

Détail d’un audit

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.

Input parameters:

- `audit_id` (string, required): id de l’audit (renvoyé par aeo_audit)

### `aeo_improvements` (~118 tokens)

Checklist d’améliorations

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.

Input parameters:

- `audit_id` (string): id de l’audit (optionnel si domain fourni)
- `domain` (string): domaine — utilise le dernier audit terminé (alternative à audit_id)

### `aeo_generate` (~329 tokens)

Générer un artefact AEO

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.

Input parameters:

- `aiCrawlingPolicy` (string): ai-txt : politique de crawl IA (défaut allow-with-attribution)
- `contact` (string): security-txt/ai-txt : email de contact (optionnel)
- `description` (string): meta : description (optionnel)
- `disclosure` (string): ai-txt : mention de divulgation de contenu IA (optionnel)
- `faqs` (array): faq : questions/réponses [{q,a}]
- `language` (string): security-txt : langues préférées / humans-txt : langue (optionnel)
- `paths` (array): sitemap : chemins à inclure (optionnel)
- `policy` (string): security-txt : URL de la politique de sécurité (optionnel)
- `team` (array): humans-txt : équipe [{name,role}] (optionnel)
- `tech` (array): humans-txt : technologies (optionnel)
- `title` (string): meta : titre (optionnel)
- `type` (string, required): type d’artefact
- `url` (string, required): URL ou domaine cible

### `aeo_apply` (~172 tokens)

Appliquer les correctifs

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).

Input parameters:

- `description` (string): optionnel : description meta/OG
- `domain` (string, required): domaine du site connecté
- `faqs` (array): optionnel : Q&A pour le FAQPage (jsonld)
- `improvement_ids` (array, required): ids des améliorations (cf. aeo_improvements.autoApplicableIds)
- `title` (string): optionnel : titre meta/OG

### `aeo_citations` (~134 tokens)

Historique de citations IA

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.

Input parameters:

- `domain` (string, required): domaine à inspecter

### `aeo_proof` (~65 tokens)

Preuve avant/après d’un domaine

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.

Input parameters:

- `domain` (string, required): domaine audité au moins 2 fois

### `aeo_monitor` (~149 tokens)

Monitoring citations programmé

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.

Input parameters:

- `action` (string, required): create | list | delete
- `brand_name` (string): nom de marque (défaut : racine du domaine)
- `domain` (string): domaine à monitorer (create)
- `frequency` (string): daily | weekly | biweekly (défaut weekly)
- `schedule_id` (string): id du schedule (delete)

### `ads_list_accounts` (~74 tokens)

Comptes Google Ads connectés

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).

### `ads_performance` (~90 tokens)

Performance des campagnes Ads

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.

Input parameters:

- `customer_id` (string): Compte Ads (optionnel — défaut : le plus récent)
- `days` (number): Période en jours (1-365, défaut 30)

### `ads_search_terms` (~103 tokens)

Termes de recherche Ads

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.

Input parameters:

- `customer_id` (string): Compte Ads (optionnel)
- `days` (number): Période en jours (défaut 30)
- `limit` (number): Max lignes (défaut 50, max 200)

### `ads_keywords` (~92 tokens)

Mots-clés Ads (avec ids)

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.

Input parameters:

- `customer_id` (string): Compte Ads (optionnel)
- `days` (number): Période en jours (défaut 30)
- `limit` (number): Max lignes (défaut 100, max 300)

### `ads_audit` (~69 tokens)

Audit Google Ads (18 critères)

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.

Input parameters:

- `customer_id` (string): Compte Ads (optionnel)

### `ads_add_negative_keywords` (~162 tokens)

Ajouter des mots-clés négatifs

É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.

Input parameters:

- `campaign_id` (string, required): Campagne cible (voir ads_performance)
- `confirm` (boolean): false/absent = dry-run ; true = appliquer
- `customer_id` (string): Compte Ads (optionnel)
- `keywords` (array, required): 1-50 termes à exclure
- `match_type` (string): EXACT (défaut) | PHRASE | BROAD

### `ads_pause_keyword` (~125 tokens)

Mettre un mot-clé en pause

É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é.

Input parameters:

- `ad_group_id` (string, required): Groupe d’annonces (voir ads_keywords)
- `confirm` (boolean): false/absent = dry-run ; true = appliquer
- `criterion_id` (string, required): Id du mot-clé (voir ads_keywords)
- `customer_id` (string): Compte Ads (optionnel)

### `ads_update_budget` (~145 tokens)

Modifier le budget quotidien d’une campagne

É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é.

Input parameters:

- `campaign_id` (string, required): Campagne cible (voir ads_performance)
- `confirm` (boolean): false/absent = dry-run ; true = appliquer
- `customer_id` (string): Compte Ads (optionnel)
- `new_daily_budget_eur` (number, required): Nouveau budget quotidien en euros

### `ads_campaign_status` (~116 tokens)

Pause / réactivation de campagne

É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é.

Input parameters:

- `campaign_id` (string, required): Campagne cible (voir ads_performance)
- `confirm` (boolean): true = appliquer (après dry-run)
- `customer_id` (string): Compte Ads (optionnel — défaut : le plus récent)
- `status` (string, required): PAUSED ou ENABLED

### `ads_list_ads` (~85 tokens)

Annonces du compte

Annonces (RSA…) avec métriques N jours et ids (ad_group_id + ad_id) nécessaires à ads_ad_status. Gratuit.

Input parameters:

- `customer_id` (string): Compte Ads (optionnel)
- `days` (number): Période en jours (défaut 30)
- `limit` (number): 1-200, défaut 100

### `ads_ad_status` (~132 tokens)

Pause / réactivation d’annonce

É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é.

Input parameters:

- `ad_group_id` (string, required): Groupe d’annonces (voir ads_list_ads)
- `ad_id` (string, required): Id de l’annonce (voir ads_list_ads)
- `confirm` (boolean): true = appliquer (après dry-run)
- `customer_id` (string): Compte Ads (optionnel)
- `status` (string, required): PAUSED ou ENABLED

### `ads_add_keywords` (~141 tokens)

Ajouter des mots-clés

É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é.

Input parameters:

- `ad_group_id` (string, required): Groupe d’annonces cible
- `confirm` (boolean): true = appliquer (après dry-run)
- `customer_id` (string): Compte Ads (optionnel)
- `keywords` (array, required): 1-20 mots-clés
- `match_type` (string): EXACT | PHRASE | BROAD (défaut EXACT)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/io-aeotool-mcp/api-mcp#diagnostics

## Score history

- 2026-08-03: 80
- 2026-08-02: 80
- 2026-08-01: 79
- 2026-07-31: 79
- 2026-07-30: 73
- 2026-07-29: 73
- 2026-07-28: 73
- 2026-07-27: 72
- 2026-07-26: 72

## Links

- Remote endpoint: https://aeotool.io/api/mcp
- Website: https://aeotool.io/mcp-agences
- Changelog RSS feed: https://verifymcp.io/servers/io-aeotool-mcp/api-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/io-aeotool-mcp/api-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/io-aeotool-mcp/api-mcp
