Skip to main content
Glama

sfrbox-toolkit

CLI, API REST et serveur MCP non officiels pour piloter la configuration d'une box SFR (firmware NB6VAC, ex. « SFR Box 7 » fibre) depuis un script, un agent IA, ou votre propre interface.

⚠️ Projet communautaire, non affilié à SFR. Basé sur une rétro-ingénierie de l'interface web publique de la box (aucun binaire ni firmware n'a été désassemblé : uniquement le HTML/JS servi par la box elle-même). Le firmware peut changer à tout moment et casser ce dépôt — voir Rétro-ingénierie pour comprendre comment diagnostiquer et corriger ce cas.

Pourquoi

L'interface web de cette box ne propose pas d'API JSON/REST documentée (contrairement par exemple à la Freebox) : chaque page de configuration est un formulaire HTML classique. Ce projet reproduit fidèlement le protocole d'authentification et le remplissage de ces formulaires pour exposer la configuration via trois interfaces :

  • CLI (sfrbox ...) pour scripter/automatiser depuis un terminal.

  • API REST (FastAPI) pour l'intégrer à votre propre outillage.

  • Serveur MCP (sfrbox-mcp) pour la piloter depuis un agent IA (Claude Code, Claude Desktop, tout client MCP).

Les trois s'appuient sur la même bibliothèque Python (src/sfrbox/), qui peut aussi être utilisée directement.

Related MCP server: io.github.antonio-mello-ai/mcp-pfsense

Modèle de box concerné

Testé et validé contre une box avec bandeau Version : NB6VAC-MAIN-R4.0.47hx (visible en bas de la page d'accueil http://192.168.1.1/, ou dans Etat > Général). Il s'agit de la box fibre couramment appelée « SFR Box 7 », basée sur une plateforme Sagemcom. Non testé sur la SFR Box 8 ni sur les anciennes box ADSL (NB4/NB6 non-VAC) : l'authentification par challenge est probablement proche, mais les formulaires de configuration peuvent différer. Contributions/rapports bienvenus (voir Contribuer).

Installation

Nécessite uv et Python ≥ 3.11.

git clone <ce-dépôt>
cd sfr-box-toolkit
uv sync
cp .env.example .env
# éditez .env : SFRBOX_HOST (192.168.1.1 par défaut), SFRBOX_LOGIN (admin
# par défaut), SFRBOX_PASSWORD (le mot de passe imprimé sous votre box,
# ou celui que vous avez personnalisé dans Maintenance > Administration).

.env est listé dans .gitignore : vos identifiants ne doivent jamais être commités. Ne les passez pas non plus en argument de ligne de commande (ils resteraient dans l'historique du shell) : toutes les interfaces les lisent depuis l'environnement/.env.

Utilisation

CLI

uv run sfrbox status wan
uv run sfrbox status devices
uv run sfrbox wifi status
uv run sfrbox wifi set-2g --ssid "MonReseau" --hidden false
uv run sfrbox wifi wpa-key-set 5ghz          # demande la nouvelle clé de façon masquée
uv run sfrbox dhcp status
uv run sfrbox nat portforward-add "Serveur web" --protocol tcp \
    --external-port 8080 --destination-ip-last-octet 42 --destination-port 80
uv run sfrbox --help                          # liste complète des commandes

API REST

uv run uvicorn sfrbox.api:app --host 0.0.0.0 --port 8000
curl http://localhost:8000/wifi/status
curl -X POST http://localhost:8000/wifi/2ghz -H 'content-type: application/json' \
    -d '{"ssid": "MonReseau"}'

Documentation interactive auto-générée sur http://localhost:8000/docs.

⚠️ Cette API donne un accès complet à la configuration de la box (y compris la lecture des clés Wifi en clair) à quiconque peut l'atteindre. Ne l'exposez pas au-delà de votre réseau local sans ajouter votre propre couche d'authentification.

Serveur MCP

uv run sfrbox-mcp

Exemple de configuration client MCP (~/.claude/mcp.json ou équivalent) :

{
  "mcpServers": {
    "sfrbox": {
      "command": "uv",
      "args": ["--directory", "/chemin/vers/sfr-box-toolkit", "run", "sfrbox-mcp"]
    }
  }
}

Le serveur lit .env depuis son répertoire de travail au démarrage. 21 outils sont exposés (statut, Wifi, DHCP, NAT/port forwarding, DMZ, UPnP, pare-feu, DDNS, redémarrage...).

Fonctionnalités couvertes

Domaine

Lecture

Écriture

Statut WAN / équipements connectés

✅

—

Wifi (2,4 GHz / 5 GHz / invité) : actif, SSID, masqué

✅

✅

Clé WPA (2,4 GHz / 5 GHz / invité)

✅

✅

WPS

—

✅

DHCP (plage, bail, réservations statiques)

✅

✅

Redirections de ports (NAT)

—

✅ (ajout/suppression)

DMZ

✅

✅

UPnP

✅

✅

Wake-on-LAN

✅

✅

Passthrough SIP ALG / PPTP / GRE

✅

✅

Pare-feu (règles simples)

✅

✅

DNS dynamique

✅

✅

Redémarrage / réinitialisation d'usine

—

✅ (confirmation requise)

Non couvert pour l'instant : téléphonie (VoIP), partage USB/Samba/UPnP-AV, IPv6, planification Wifi horaire, mode Eco, routes statiques, entrées DNS locales. Le code est structuré pour que l'ajout d'un module suive exactement le même schéma que les modules existants (voir Contribuer).

Rétro-ingénierie : comment ça marche

Toute la logique vient de la lecture du HTML/JS servis publiquement par la box elle-même (/js/global.js, /js/login.js, et les pages de configuration) — aucune inspection de binaire, aucun accès à du code propriétaire non exposé.

Authentification (src/sfrbox/auth.py)

  1. POST /login avec action=challenge (en-têtes X-Requested-With: XMLHttpRequest requis) renvoie un challenge aléatoire en XML : <rsp stat="ok"><challenge>...</challenge></rsp>.

  2. Le client calcule :

    hash = HMAC-SHA256(clé=challenge, message=SHA256_hex(login))
         + HMAC-SHA256(clé=challenge, message=SHA256_hex(password))

    Point non intuitif (source d'erreur n°1 si vous réimplémentez ceci) : c'est le challenge qui sert de clé HMAC, et le SHA-256 hexadécimal de l'identifiant/mot de passe qui sert de message — pas l'inverse. Le mot de passe en clair ne quitte jamais le client.

  3. POST /login avec method=passwd, zsid=<challenge>, hash=<hash>, et les champs login/password vides. En cas de succès, la box pose un cookie de session sid et redirige vers /index.

Pages de configuration (src/sfrbox/parsing.py, client.py)

Aucune API JSON : chaque page (/wifi/config, /network/dhcp, /network/nat, ...) est un formulaire HTML classique en Post/Redirect/Get. Ce toolkit :

  1. Récupère la page et parse tous ses <form> (valeurs par défaut : texte/hidden tels quels, checked pour les radios/checkbox, selected pour les select).

  2. Fusionne les champs demandés par l'appelant avec les valeurs par défaut (pour ne pas écraser involontairement un champ voisin, comme le ferait un navigateur qui ne soumet que les champs présents dans le formulaire affiché).

  3. Ajoute le nom du bouton de soumission cliqué (une page peut contenir plusieurs formulaires, ou un même formulaire plusieurs boutons — observé sur /wifi/config où les blocs 2,4 GHz / 5 GHz / invité partagent un seul <form> avec 3 boutons distincts).

  4. Soumet en POST application/x-www-form-urlencoded.

Si le firmware change

Si une commande échoue avec SFRBoxFormError, c'est probablement que la structure d'un formulaire a changé entre versions de firmware. Pour diagnostiquer :

uv run python -c "
from sfrbox.config import Settings
from sfrbox.parsing import parse_forms
c = Settings.from_env().client(); c.login()
html = c.get_html('/wifi/config')
for f in parse_forms(html, c.base_url, '/wifi/config'):
    print(f.element_id, f.fields, f.buttons)
"

et comparez avec le module concerné dans src/sfrbox/modules/.

Sécurité

  • Toutes les requêtes se font en HTTP non chiffré sur le réseau local (comme le fait l'interface web native de la box) : c'est le comportement natif de la box, pas une régression de ce projet. N'utilisez ce toolkit que depuis un réseau de confiance.

  • Ne commitez jamais .env, un export de configuration de la box, ou une capture HAR/PCAP : ces fichiers contiennent des identifiants et des clés Wifi en clair.

  • L'API REST et le serveur MCP donnent tous deux un accès complet (lecture et écriture, y compris les clés Wifi) à la configuration de la box. Ne les exposez pas au-delà de votre réseau local.

  • Les actions de redémarrage/réinitialisation d'usine exigent une confirmation explicite (--yes en CLI, confirm=true en API/MCP) pour limiter les déclenchements accidentels.

Contribuer

Pour ajouter un module (ex. VoIP, IPv6) :

  1. Authentifiez-vous sur l'interface web réelle et identifiez la page concernée.

  2. Utilisez le script de diagnostic ci-dessus (section Rétro-ingénierie) pour lister les formulaires, champs, boutons de soumission de la page.

  3. Créez src/sfrbox/modules/<domaine>.py sur le modèle des modules existants (get_config/set_config utilisant client.get_form/client.submit_form).

  4. Exposez les nouvelles fonctions dans cli.py, api.py et mcp_server.py.

  5. Ajoutez des tests sur la logique de parsing avec du HTML de test synthétique (voir tests/test_parsing.py) — ne commitez jamais de HTML exporté depuis une vraie box (il peut contenir des secrets).

Licence

MIT — voir LICENSE.

Available Tools

21 tools
connected_devicesA

Liste des équipements connectés au réseau local (MAC, nom d'hôte, IP, port).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. The word "Liste" implies a non-mutating read, which is meaningful given there are no annotations, but the description says nothing about permissions, rate limits, or whether the list is a live scan or a cached snapshot. The field enumeration is largely redundant with the existing output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence that names the resource first and the returned fields second. No filler, no restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only listing tool with an output schema that already defines the return shape, the description is nearly sufficient. The only real gap is the absence of any usage context or distinction from dhcp_status.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool applies. The description correctly implies the call is filterless and returns all connected devices.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("Liste des équipements connectés au réseau local") and enumerates the fields surfaced (MAC, hostname, IP, port). It is clearly distinguishable from write-oriented siblings like wifi_set_guest or nat_add_port_forward, though it does not explicitly position itself against the potentially overlapping dhcp_status, which may also report hosts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no when-to-use context, no prerequisites, and names no alternative. An agent must infer from the tool name alone whether this is the right call versus dhcp_status or wan_status when investigating network devices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ddns_setD

Modifie la configuration DNS dynamique.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNo
serviceNo
hostnameNo
passwordNo
usernameNo

TDQS

D1.9/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure and fails completely. It doesn't state whether this is a partial or full update, what happens to unspecified fields (all parameters have default null), whether changes require authentication, or whether the operation is reversible. For a mutation tool with zero annotation coverage, this is a serious gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is concise and front-loaded, but it's too minimal to be useful. It's efficient in size but lacks any structural elements that would help an agent understand the tool's behavior or parameters.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a 5-parameter mutation tool with no annotations and no output schema, the description is completely inadequate. It should at minimum describe the parameters, the update behavior, and any prerequisites or side effects, but it provides none of that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 5 parameters with 0% description coverage, so the description must fully compensate, and it does not. It provides no explanation of what active, service, hostname, username, or password mean in the context of DDNS configuration, nor how they should be formatted or used together.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a verb (Modifie) and a resource (configuration DNS dynamique), which is clearer than a tautology but still vague compared to siblings like dhcp_set, firewall_set, or ddns_status. It doesn't differentiate from similar configuration-setting tools, and doesn't specify what aspect of the DDNS config is being modified beyond the resource name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like ddns_status. It doesn't mention prerequisites, whether the DDNS service must be enabled first, or what context triggers a need to modify DDNS settings. The description provides no usage context at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ddns_statusC

Configuration DNS dynamique courante.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. The word "courante" weakly implies a read-only snapshot, but it says nothing about whether this requires authentication, whether it reflects the running config or the persisted config, or what triggers a change. For a zero-annotation tool this is a significant gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with no wasted words and the resource front-loaded. It is appropriately sized, though its brevity edges toward under-specification rather than true conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and no annotations, the description should describe what the status response contains (provider, hostname, update interval, enabled state). Instead it only names the concept, leaving the agent unable to predict the return payload for a tool whose entire value is its output.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate. Baseline 4 applies for a zero-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The phrase "Configuration DNS dynamique courante" identifies the resource (dynamic DNS configuration) and implies a read of the current state, but it is a noun phrase with no verb and no differentiation from the sibling ddns_set. An agent can guess it reads DDNS config, but the tool's action is only inferred from the name, not stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus ddns_set or any other sibling. The status/set pairing is inferable from the names alone, but the description contributes nothing about context, prerequisites, or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dhcp_setC

Modifie la configuration DHCP. Les bornes sont le dernier octet (192.168.1.X).

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNo
lease_secondsNo
range_end_last_octetNo
range_start_last_octetNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden, yet it says nothing about mutation semantics, whether omitted fields are preserved or reset, permission requirements, or validation of the octet bounds. It only clarifies the range encoding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and followed by the one genuinely clarifying detail. Efficient, though the terse phrasing leaves semantic gaps.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with zero annotations, no output schema, and 0% parameter coverage needs far more than two sentences. It does not state what a successful change affects or how to interpret the remaining parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It usefully explains that the range bounds refer to the last octet (192.168.1.X), clarifying range_start/end_last_octet, but active and lease_seconds remain entirely undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (modifie) and resource (configuration DHCP), clearly distinguishing it from the sibling dhcp_status. It is recognizable without opening the schema, though it doesn't explicitly name the read counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no mention of reading state first via dhcp_status, and no exclusions. The purpose implies usage but nothing routes the agent or warns about mutation prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

dhcp_statusB

Configuration DHCP courante (actif, plage d'adresses, durée de bail).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It reveals the return content (active state, address range, lease duration) but says nothing about permissions, whether it's read-only (though the name implies read), rate limits, or what happens if DHCP is disabled. With no annotations, this is a significant gap for a status tool that could be called frequently.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, short sentence that front-loads the resource and then specifies the key data points. Every word earns its place, and there is no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters and no output schema, the description provides a reasonable summary of what is returned. However, it lacks any indication of the return structure (e.g., whether lease duration is in seconds or a formatted string) and does not mention potential error conditions or empty states. For a status tool, it's adequate but not complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so the baseline is 4. The description correctly focuses on what the tool returns rather than parameters. It doesn't add parameter information, but none is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (current DHCP configuration) and enumerates what is returned (active state, address range, lease duration). It's clear what the tool does, though the French phrasing 'Configuration DHCP courante' is slightly less direct than a verb-first formulation. Sibling differentiation is implied by the '_status' suffix (dhcp_status vs dhcp_set), but not explicitly stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The name suggests it's a read operation for current DHCP settings, and the sibling list includes dhcp_set for configuration changes, but the description never mentions this distinction or any preconditions. For a status tool in a network management suite, the absence of 'use this to read, use dhcp_set to modify' is a gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

firewall_setD

Modifie la configuration du pare-feu.

ParametersJSON Schema
NameRequiredDescriptionDefault
activeNo
block_smtpNo
block_icmp_pingNo
block_windows_sharingNo

TDQS

D1.7/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden, yet it discloses nothing about behavior. It does not say whether this is a partial patch or a full replacement of the firewall config, whether omitted fields are left untouched or reset, what permissions are required, or whether changes are reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler, so it is concise in form. But the brevity reflects under-specification rather than efficiency: for a four-parameter mutation tool the sentence is too small to carry its job.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A mutation tool with no annotations, no output schema, and zero parameter documentation leaves the agent without any of the information it needs to call this safely. Nothing about scope, semantics of the null defaults, or effects is conveyed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters1/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All four parameters (active, block_smtp, block_icmp_ping, block_windows_sharing) have 0% schema description coverage, and the description mentions none of them. In particular it never explains the null default, which determines whether a setting is modified at all.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Modifie la configuration du pare-feu'), so an agent knows it mutates firewall settings rather than reading them. However, it gives no indication of which settings are affected and does nothing to distinguish it from the sibling firewall_status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus firewall_status or any other sibling, no prerequisites, and no conditions or exclusions. The agent is left to infer usage entirely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

firewall_statusC

Configuration du pare-feu (actif, blocage partage Windows/SMTP/ping).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it discloses almost nothing: no statement of whether this is a read-only query, what is returned, or what permissions are needed. The word "Configuration" actively works against the status-reading implication of the name, though this is a naming conflict rather than an annotation contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence that front-loads the subject and lists the relevant scope items in parentheses. No filler or redundancy, though the brevity comes at the cost of the missing behavioral detail noted elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status tool with no output schema, the definition is minimally adequate — the aspects it reports are listed. However, it never resolves the read-vs-write ambiguity against firewall_set, which is the one thing an agent most needs clarified here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so per the baseline this dimension is inherently satisfied without description-level parameter explanation. Nothing in the description is needed to compensate for missing parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The name signals a status read, but the description says "Configuration du pare-feu" (firewall configuration), which reads like a write operation and is ambiguous against the sibling firewall_set. It does enumerate the covered aspects (active state, Windows sharing/SMTP/ping blocking), so scope is partly conveyed, but the core verb (read vs. configure) is left unclear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to use this tool versus firewall_set or the other *_status siblings. No prerequisites, no exclusions, no alternatives named; the agent must infer usage from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nat_add_port_forwardC

Ajoute une redirection de port. protocol vaut "tcp" ou "udp".

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
protocolYes
external_portYes
destination_portYes
destination_ip_last_octetYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses the protocol values ('tcp'/'udp'), but says nothing about permissions required, persistence across reboots, whether the rule is applied immediately, or conflicts with existing rules — significant gaps for a network-config mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action front-loaded and no padding. It is efficient, though it is terse to the point of under-specification rather than genuinely economical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and five required undocumented parameters, the description is not sufficient. It covers only the protocol value and omits behavioral traits, parameter meanings, and any usage context an agent would need.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% with 5 required parameters, so the description must compensate. It only clarifies one parameter (protocol = 'tcp' or 'udp'); the roles of name, external_port, destination_port, and especially destination_ip_last_octet are left entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific verb and resource ('Ajoute une redirection de port'), making the create-style action clear. Its name (nat_add_port_forward) and the sibling nat_remove_port_forward let an agent infer the distinction, but the description itself does not explicitly differentiate the tool from its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states what the tool does but gives no when-to-use, when-not-to-use, or prerequisite guidance. There is no mention of the nat_remove_port_forward alternative or of situations where port forwarding should not be configured.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nat_get_dmzB

État de la DMZ (hôte exposé directement à Internet).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. "État" implies a read-only inspection, and the parenthetical clarifies what DMZ means, but it does not disclose the returned state shape, auth requirements, or whether the DMZ can be enabled/disabled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the key noun and a clarifying definition; front-loaded and waste-free. It is arguably too terse to earn a 5 given the missing behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless read tool with no output schema, the description is minimally adequate. It identifies the resource but says nothing about the possible returned states (enabled/disabled, host address), which an agent would want before invoking.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource (DMZ) and read intent ("État"), and parenthetically defines DMZ as a host exposed directly to the Internet. It is distinguishable from the sibling nat_set_dmz by the read-vs-write verb, though it never names that sibling explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus nat_set_dmz, firewall_status, or wan_status. The read-only status-check intent is only implied by the word "État", leaving the agent to infer context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nat_get_upnpB

État d'UPnP (ouverture automatique de ports par les applications).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It does not state that the call is a non-mutating read, nor what the returned state contains (e.g. enabled/disabled), nor any error conditions. For a zero-argument status probe this is low-risk, but the disclosure is still thin.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence that front-loads the resource and follows with a clarifying gloss. Nothing is wasted, though the gloss about UPnP is more contextual help than operational detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 0-param read tool with no output schema, the description identifies the subject and briefly defines UPnP, which is the minimum an agent needs. It stops short of describing the shape of the returned state or its relationship to nat_set_upnp.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is no parameter semantics for the description to add. The 100% schema coverage is trivially satisfied by an empty object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (UPnP) and aspect (its status/state), and the parenthetical explains what UPnP does. The read verb is only implied by 'État' and the get_ prefix rather than stated outright, and it does not name the sibling nat_set_upnp it pairs with, so it is clear but not sibling-differentiating.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description contains no when-to-use guidance, no mention of the nat_set_upnp alternative, and no prerequisites. The agent must infer from the tool name alone that this is a read counterpart to the set operation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nat_remove_port_forwardC

Supprime une redirection de port par son numéro de ligne dans l'interface web.

ParametersJSON Schema
NameRequiredDescriptionDefault
row_indexYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It reveals the useful mechanic that rules are identified by their web-interface row number, but says nothing about irreversibility, whether the change applies immediately or needs a reboot, required privileges, or what happens when the row index is invalid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with no filler and the destructive verb front-loaded. It is efficiently sized, though the extreme brevity is part of why other dimensions are thin.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation with no annotations, no output schema, and an undocumented parameter, the description should do more. It leaves the agent without confirmation semantics, failure behavior, or any indication of what state remains after the deletion.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single 'row_index' parameter has no schema description, so the description must compensate. It does clarify that the value is a row number in the web interface, but omits how to obtain that index or whether it is 0- or 1-based, leaving a real ambiguity for a required parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Supprime une redirection de port') plus the identifying mechanism ('par son numéro de ligne'), which cleanly separates it from the sibling nat_add_port_forward. It does not explicitly name the alternative, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives, no prerequisites, and no conditions under which it should not be used. Usage is only inferable from the verb 'Supprime'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nat_set_dmzC

Active/désactive la DMZ vers 192.168.1..

ParametersJSON Schema
NameRequiredDescriptionDefault
activeYes
ip_last_octetNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and delivers little beyond the verb. It does not say whether enabling overwrites an existing DMZ target, what happens when ip_last_octet is omitted (default null), whether the change is reversible, or what confirmation is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler; the action and target appear immediately. It is arguably too terse for the risk profile, but there is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a network-mutating tool with zero annotations, 0% parameter coverage, and no output schema, the description is incomplete: the null/default case for ip_last_octet, the effect on existing DMZ configuration, and any precondition check via nat_get_dmz are all unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it partially does: the '192.168.1.<ip_last_octet>' template explains what ip_last_octet means and implies the 192.168.1.0/24 subnet restriction. It says nothing about the required boolean 'active' semantics or the behavior when ip_last_octet is null.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb pair (active/désactive) and resource (DMZ) plus the target address pattern '192.168.1.<ip_last_octet>', so the agent knows this is a setter that points the DMZ at a LAN host. It does not explicitly contrast itself with the sibling nat_get_dmz, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No indication of when to enable versus disable the DMZ, no prerequisites (e.g., checking current state with nat_get_dmz first), and no warning about the security exposure a DMZ creates. The agent must infer all usage context from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

nat_set_upnpC

Active/désactive UPnP.

ParametersJSON Schema
NameRequiredDescriptionDefault
enabledYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden, and it says almost nothing. It does not disclose whether the setting persists across reboots, whether disabling UPnP tears down existing mappings, or what permissions are needed for a router configuration change.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence with the action front-loaded and zero filler. It is efficient, though the terseness borders on under-specification for a config-mutating tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and an undocumented parameter, the description is too thin. It omits the state-change consequences an agent needs before toggling a router's UPnP setting.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single 'enabled' boolean, but the description's 'active/désactive' phrasing maps clearly onto true/false, partially compensating. It adds direction semantics but no defaults or format detail beyond that.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb pair and resource: enable/disable UPnP. An agent can distinguish it from nat_get_upnp by the mutating verb, but the description itself never names the read counterpart, so sibling differentiation relies on the tool name alone.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of checking current state first via nat_get_upnp, and no note on prerequisites or side effects. The agent must infer that this is the write counterpart to the getter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

system_rebootA

Redémarre la box. confirm doit valoir true (coupe Internet/Wifi temporairement).

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully discloses the side effect (temporary Internet/Wifi outage), which is the key trait an agent needs, but omits outage duration, whether configuration persists, and whether this requires elevation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the action first and the side-effect warning parenthesized. Nothing is redundant or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter, no-annotation, no-output-schema tool, the definition covers the action, the required guard value, and the main consequence. Only the duration/scope of the outage is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the single property is a bare 'Confirm' boolean. The description compensates by stating that `confirm` must be set to true, clarifying the parameter's role beyond the schema, though it does not explain the behavior when false.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb+resource ('Redémarre la box'), so the action is unambiguous. It does not need to distinguish from siblings since none of the listed tools (all status/set operations) perform a reboot.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating the `confirm` flag must be true, which effectively tells the agent a guard precondition exists. It gives no explicit when-to-use/when-not guidance relative to alternatives, but for a reboot tool with no sibling there is little to compare against.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wan_statusA

Statut de la connexion Internet (état, profil FTTH/xDSL, temps de connexion).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. 'Statut' strongly implies a read-only, side-effect-free query and it discloses what information is returned, but it never explicitly confirms read-only semantics, permissions, or response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the resource first and the returned details parenthetically. No filler, nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-param, no-annotation tool with no output schema, the description does the essential job of telling the agent what information comes back (state, FTTH/xDSL profile, uptime). Only the lack of any routing hint versus sibling status tools keeps it from being fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4; there is no parameter surface the description needs to explain.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource (WAN/Internet connection status) and enumerates the returned facets (état, profil FTTH/xDSL, temps de connexion). It is clearly distinguishable from siblings like wifi_status or dhcp_status, though it never names those alternatives explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is the tool for checking Internet connectivity, but there is no explicit when-to-use guidance, no statement of preconditions, and no contrast with the many sibling *_status tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wifi_get_wpa_keyB

Récupère la clé WPA en clair pour la bande donnée : "2.4ghz", "5ghz" ou "guest".

ParametersJSON Schema
NameRequiredDescriptionDefault
bandYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full behavioral burden. Apart from 'en clair' (plaintext), it does not disclose that this returns a sensitive secret, whether authentication is required, or any rate-limit/masking behavior. That is a material omission for a secret-retrieval tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence that states the action, the parameter's accepted values, and the return nature (plaintext). No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value explanation is not needed, and the parameter values are given. But as a secret-retrieval tool with no annotations, the description should mention security context or prerequisites; it is minimally adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates by enumerating the allowed band values ('2.4ghz', '5ghz', 'guest'). However, the schema defines no enum, so these values are only in prose and could be missed by an agent relying on structured fields.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear specific verb and resource: retrieves the WPA key in plaintext. Distinguishes from sibling wifi_set_wpa_key (setter vs getter), but does not explicitly name the sibling or clarify that 'plaintext' means returning a secret (security-relevant behavior).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by the name and the band values but there is no explicit when/when-not guidance or mention of alternatives. For a simple getter this is acceptable, but it could state that it only reads the configured key.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wifi_set_2ghzB

Modifie le réseau Wifi 2,4 GHz. Ne fournir que les champs à changer.

ParametersJSON Schema
NameRequiredDescriptionDefault
ssidNo
activeNo
hiddenNo

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It signals a mutation ('Modifie') but discloses nothing about permissions required, whether changes take effect immediately or trigger a radio restart, or whether unspecified fields are preserved.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, zero filler, with the scope (2.4 GHz) front-loaded ahead of the calling instruction. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and three undocumented parameters, the description should say more about field meanings and side effects. It covers purpose and partial-update style but leaves the agent guessing about behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters, so the schema only shows nullable defaults. The instruction to send only changed fields adds genuine partial-update semantics beyond the schema, but ssid/active/hidden are never explained in the description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb ('Modifie') and resource ('réseau Wifi 2,4 GHz'), which implicitly separates it from the sibling wifi_set_5ghz and wifi_set_guest. It is clear what the tool touches, though it does not name those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The band qualifier ('2,4 GHz') implies when this tool applies versus the 5 GHz sibling, and 'Ne fournir que les champs à changer' gives a partial-update calling convention. However there is no explicit when-to-use/when-not statement or prerequisite (e.g., auth, restart).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wifi_set_5ghzC

Modifie le réseau Wifi 5 GHz. Ne fournir que les champs à changer.

ParametersJSON Schema
NameRequiredDescriptionDefault
ssidNo
activeNo
hiddenNo

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full disclosure burden. It hints at partial-update semantics, but says nothing about side effects (client disconnection when the SSID changes), whether changes apply immediately or require a reboot, or permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and resource, followed by the key constraint. No filler, though the constraint sentence is terse to the point of under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with no annotations, no output schema, and 0% parameter coverage, the description leaves too much unsaid: side effects on connected clients, whether the WPA key is affected, and what each field controls are all absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain ssid, active, and hidden. It only states that unchanged fields should be omitted, adding partial-update semantics but no meaning for any individual parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Modifie') and resource ('le réseau Wifi 5 GHz'), which cleanly separates it from wifi_set_2ghz and wifi_set_guest by band. It does not explicitly name those siblings, but the band qualifier makes the distinction inferable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Ne fournir que les champs à changer' gives a partial-update usage rule, implying optional fields and sparse updates. However, it offers no guidance on when to choose this tool over wifi_set_2ghz/wifi_set_guest, nor any prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wifi_set_guestB

Modifie le réseau Wifi invité. Ne fournir que les champs à changer.

ParametersJSON Schema
NameRequiredDescriptionDefault
ssidNo
activeNo
hiddenNo

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It only notes that omitted fields are left unchanged; it says nothing about required permissions, whether a reboot/reconnect is triggered, whether existing clients are dropped, or whether the change is reversible.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse sentences with the action first and the calling constraint second; nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation tool with no annotations, no output schema, and 0% schema coverage, the description is only minimally sufficient. It conveys partial-update behavior but leaves the caller without any expectation of side effects, errors, or confirmation of success.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and parameters are nullable with defaults, so the schema alone is ambiguous about omission semantics. The description partially compensates by stating that only fields to change should be supplied, but it adds no meaning for ssid/active/hidden beyond their self-evident names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: modifying the guest WiFi network ("Modifie le réseau Wifi invité"). The "invité" qualifier implicitly separates it from wifi_set_2ghz and wifi_set_5ghz, though the description never names those siblings or clarifies the relationship between the guest network and the band-specific tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

"Ne fournir que les champs à changer" gives useful partial-update guidance, telling the caller not to resend unchanged fields. However, there is no explicit when-to-use signal versus wifi_set_2ghz/wifi_set_5ghz/wifi_set_wpa_key, nor any stated prerequisites.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wifi_set_wpa_keyB

Change la clé WPA (8-63 caractères) pour la bande "2.4ghz", "5ghz" ou "guest".

ParametersJSON Schema
NameRequiredDescriptionDefault
bandYes
new_keyYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It states this is a mutation and gives a key-length rule, but says nothing about permissions/auth requirements, whether changing the WPA key drops connected clients, or whether the change takes effect immediately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with zero filler, mentioning the key-length rule as a compact parenthetical. Efficient and well-structured, though it is slightly terse given the absence of behavioral context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity two-parameter mutation tool with no annotations and no output schema, the description covers parameter validity but omits the behavioral consequences of the change. It is adequate but leaves meaningful gaps an agent would want before invoking a key-changing write.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and both required parameters are undocumented in the schema, so the description must compensate. It does so well: it enumerates the accepted band values ('2.4ghz', '5ghz', 'guest') and gives the new_key length constraint (8-63 characters), adding real meaning for both parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (change) and resource (the WPA key) scoped to a band, so an agent can distinguish it from the getter wifi_get_wpa_key and the band setters. It is clear but does not explicitly name which sibling to prefer, so it stops short of the sibling-differentiation bar for a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It lists valid band values but gives no when-to-use guidance, no prerequisites, and no routing relative to alternatives like wifi_set_2ghz, wifi_set_5ghz or wifi_set_guest. The conditions for choosing this tool over its siblings are left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wifi_statusB

État des 3 réseaux Wifi (2,4 GHz, 5 GHz, invité) : actif, SSID, masqué.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It partially compensates by enumerating the data that comes back (active, SSID, masked), implying a non-destructive read, but it says nothing about permissions, whether the SSID is exposed in cleartext, or the response format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded clause stating the resource first (the 3 WiFi networks) followed by the returned fields. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must convey the shape of the result; it does list the returned fields but only tersely, leaving the exact format (e.g., what 'masqué' looks like in the payload) unspecified. Adequate for a zero-parameter read tool but not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a parameterless tool is 4. The description correctly implies no input is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the specific resource (the 3 WiFi networks: 2.4 GHz, 5 GHz, guest) and the data returned (active state, SSID, hidden flag), which is clearly a read of WiFi status. It implicitly distinguishes itself from siblings like wan_status, connected_devices and the wifi_set_* tools, though it never names those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives such as wan_status or wifi_get_wpa_key, and no prerequisites or context are given. The read-only nature of a 'status' tool makes the intent somewhat inferable, but the description provides no guidance at all.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv0.1.0
    • First observedconnected_devices
    • First observedddns_set
    • First observedddns_status
    • First observeddhcp_set
    • First observeddhcp_status
    • First observedfirewall_set
    • First observedfirewall_status
    • First observednat_add_port_forward
    • First observednat_get_dmz
    • First observednat_get_upnp
    • First observednat_remove_port_forward
    • First observednat_set_dmz
    • First observednat_set_upnp
    • First observedsystem_reboot
    • First observedwan_status
    • First observedwifi_get_wpa_key
    • First observedwifi_set_2ghz
    • First observedwifi_set_5ghz
    • First observedwifi_set_guest
    • First observedwifi_set_wpa_key
    • First observedwifi_status

TDQS

B3/5.0

Scored across 21 tools

Disambiguation4/5

Most tools target distinct resources and actions (e.g., wifi_set_2ghz vs wifi_set_wpa_key, nat_get_dmz vs nat_set_dmz). A few adjacent wifi and NAT operations could be confused at first glance, but descriptions clarify their boundaries.

Naming Consistency5/5

All tool names use consistent snake_case with a clear domain prefix followed by an action or status suffix. The pattern is predictable across wan, wifi, dhcp, ddns, nat, firewall, and system tools.

Tool Count4/5

21 tools is somewhat heavy but reasonable for a router administration server covering Wi-Fi, DHCP, DDNS, NAT, firewall, status, and reboot. Each tool maps to a specific configuration or status operation.

Completeness3/5

Core router management areas are covered, but there is no tool to list existing NAT port forwards, despite nat_remove_port_forward requiring a line number. This creates a notable dead end for discovery and safe removal.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Enables AI agents to manage OpenWRT routers remotely via SSH, supporting system monitoring, network management, OpenThread Border Router configuration, and package management through natural language commands.
    19
    16
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI agents to manage TP-Link routers by listing clients, checking status, controlling Wi-Fi, and rebooting via natural language.
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Lets an AI assistant inspect and adjust TP-Link Omada WiFi networks by searching, describing, and calling any of roughly 1,650 Omada Open API operations through nine tools. It is read-only by default, refusing every non-GET request unless writes are explicitly unlocked, and even then returning a dry-run preview until a change is confirmed.
    9
    4
    MIT