Denon MCP Server
Provides tools for controlling Denon AVR home-cinema receivers via the Denon AVR Control telnet protocol, enabling power, volume, mute, input selection, and status retrieval.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Denon MCP ServerTurn on the Denon AVR, set input to TV, and set volume to 35."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Denon MCP Server
English summary. MCP server for Denon AVR home-cinema receivers over the local telnet control protocol: power, volume, mute, inputs, status. Configure with DENON_HOST / DENON_PORT (optional DENON_MAC to follow the receiver when DHCP changes its IP) or a config.yaml; runs standalone (uvx denon-mcp after PyPI publication).
Serveur MCP pour contrôler un Home Cinema Denon AVR via le protocole Denon AVR Control (telnet).
Démo

Enregistrée sur l'ampli réel avec docs/demo/record.sh : un client MCP minimal (docs/demo/mcp_demo.py) démarre le serveur en stdio avec DENON_HOST dans l'environnement, liste les outils et appelle get_status (lecture seule).
Related MCP server: bluesound-mcp
Modèle supporté
Denon AVR-X1700H DAB
Autres modèles AVR-X series compatibles avec le protocole Denon AVR Control
Configuration
Ordre de résolution : variables d'environnement, puis fichier YAML (DENON_CONFIG, sinon ./config.yaml, sinon config.yaml à côté du serveur, sinon celui de Lyra si le serveur est installé dans son arborescence). Le serveur fonctionne seul, sans Lyra.
Sans réservation DHCP, renseignez aussi mac (ou DENON_MAC) : si l'IP ne répond plus, le serveur retrouve le Denon par son adresse MAC dans la table de voisinage du réseau local (une recherche toutes les 2 min au plus) et bascule sur la nouvelle IP.
Installation en une ligne
uvx denon-mcp # après publication sur PyPI ; en attendant : uvx --from git+https://github.com/amineutron/denon-mcp denon-mcpConfiguration Claude Desktop / Claude Code (mcpServers) :
{ "denon": { "command": "uvx", "args": ["denon-mcp"], "env": { "DENON_HOST": "192.0.2.22" } } }Ajouter dans config.yaml :
denon:
host: "192.0.2.10" # IP du Denon (exemple)
port: 23 # Port telnet (default: 23)Les valeurs ci-dessous sont des exemples : remplacez-les par les valeurs de votre appareil
(IP affichée dans le menu réseau de l'ampli, adresse MAC au format AA:BB:CC:DD:EE:FF
utile pour une réservation DHCP ou le Wake-on-LAN).
Outils disponibles
Outil | Rôle |
| Regle le volume du Denon a un niveau specifique (0-98). 80 = 0dB reference. |
| Augmente le volume du Denon. |
| Baisse le volume du Denon. |
| Active le mute du Denon. |
| Desactive le mute du Denon. |
| Toggle le mute du Denon (on/off). |
| Allume le Denon AVR. |
| Eteint le Denon AVR (standby). |
| Retourne le statut du Denon : volume, power (on/standby/unknown), muted, source (BD, TV, GAME...), reachable. |
| Change la source d'entree du Denon (BD, TV, GAME, SAT/CBL, DVD, MPLAY). |
Sources d'entrée
BD: Blu-ray / Lecteur BDTV: Entrée TVGAME: Console de jeuSAT/CBL: Satellite / CâbleDVD: Lecteur DVDMPLAY: Media Player
Aliases supportés : bluray, blu-ray, cable, sat, media, mediaplayer
Échelle de volume
0-98 : Échelle Denon (0 = -80 dB, 80 = 0 dB référence, 98 = +18 dB)
Pour une écoute normale : 30-50
Pour un home cinéma : 50-70
Maximum recommandé : 80 (0 dB)
Protocole Denon AVR Control
Commandes telnet sur port 23 :
MV44: Volume 44MV?: Demander le volume actuelMVUP/MVDOWN: Volume +/-PWON/PWSTANDBY: Power on/offMUON/MUOFF: Mute on/offSIBD: Source Blu-ray
Notes HDMI ARC
Quand un home cinéma est connecté en HDMI ARC/eARC à la TV :
Le volume de la TV est désactivé
C'est le home cinéma qui contrôle le volume audio
Les commandes
tv.volume_*ne fonctionnent PASUtiliser
denon.volume_*à la place
Test manuel
# Test connexion
echo "MV?" | nc 192.0.2.10 23
# Régler volume à 44
echo "MV44" | nc 192.0.2.10 23
# Allumer
echo "PWON" | nc 192.0.2.10 23Installation
denon-mcp # installé (pip, uvx) ; `denon-mcp --help` liste les réglages
python -m denon_mcp # équivalent, depuis tout environnement où le paquet est installé
python server.py # depuis un clone, sans installation (lanceur minimal, code dans denon_mcp/)Le code vit dans le paquet denon_mcp : il s'installe à côté d'autres serveurs MCP sans conflit de nom de module.
Le serveur est automatiquement lancé par Lyra via la config MCP.
Part of the Lyra ecosystem
Dépôt | Rôle |
assistant DevOps vocal, local par défaut (AGPL-3.0) | |
MCP : machines virtuelles KVM et sauvegardes | |
MCP + API + tableau de bord des tâches longues | |
hub PWA du homelab | |
MCP Philips Hue (fork de ThomasRohde/hue-mcp) | |
MCP TV Philips | |
MCP ampli Denon | |
MCP Chromecast et DLNA |
Available Tools
10 toolsget_statusARead-onlyIdempotent
Retourne le statut du Denon : volume, power (on/standby/unknown), muted, source (BD, TV, GAME...), reachable.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond that: it reveals possible values like power 'unknown', a 'reachable' flag, and the full list of status fields returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted words. Every element earns its place: the resource, the action, and a compact parenthetical list of all returned fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only status tool, the description is complete: it lists all meaningful return values and the annotations cover safety, idempotence, and world-openness. Since there is no output schema, the explicit field enumeration is especially valuable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero properties and schema description coverage is 100%, so there are no parameters to explain. With 0 params, the baseline is 4, and the description introduces no parameter-related ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Retourne') and names the exact resource ('statut du Denon') with the returned fields enumerated (volume, power, muted, source, reachable). It clearly distinguishes itself from the sibling tools, which are all mutating commands such as volume_set, power_on, and mute_toggle.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The read-only nature and returned fields make it obvious this is the status-checking tool among the sibling control commands, but the description gives no explicit when-to-use or when-not-to-use guidance. It relies on inference from the sibling names and annotations rather than stating a decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mute_offCIdempotent
Desactive le mute du Denon.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, destructiveHint=false, idempotentHint=true, openWorldHint=true. The description does not contradict annotations, but it also doesn't add behavioral context beyond what annotations imply. For instance, since it's not read-only't it's a state-changing action, but the description doesn't clarify whether it affects all zones or only the current one. IdempotentHint is true, so calling repeatedly is safe, but that's not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise ('Desactive le mute du Denon.' – one sentence). It is front-loaded with the essential action. Could be slightly more informative but no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with no params and no output schema, the description is minimal but sufficient to understand the basic action. However, it lacks any context about the device state or side effects. Additional context such as 'This only affects the master zone' or 'This is equivalent to toggling mute when mute is on' would improve completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Tool has 0 parameters and schema coverage is 100%, so the description need not add parameter info. The baseline for 0 params is 4, and there is nothing to add, so a 4 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Purpose is clear: unmute the Denon device. The description uses a specific verb and resource, but is minimal and lacks context beyond the action. It distinguishes from siblings like mute_on and mute_toggle by its direct naming.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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. It doesn't mention that mute_toggle could be used as a generic alternative, nor does it describe any prerequisites (e.g., device must be powered on). A better description would note that this is for explicitly turning mute off.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mute_onAIdempotent
Active le mute du Denon.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose that this is a non-read-only, idempotent, and non-destructive operation. The description adds the target device ('Denon') but doesn't discuss side effects, prerequisites, or error conditions, though for a simple mute activation this is acceptable given annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that immediately conveys the action and target. There is no superfluous information, achieving excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity—no parameters, no output schema, and straightforward action—the description provides adequate context by identifying the device and the operation. It doesn't reference related tools, but that is not strictly necessary for a basic mute-on command.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, and the schema coverage is 100% (an empty schema). The description doesn't need to elaborate on parameters, and it correctly implies the mute operation applies to the Denon device, satisfying the baseline for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('activate the mute') and identifies the target device ('Denon'). This verb-resource pairing distinguishes it from sibling tools like mute_off and mute_toggle, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its siblings, such as mute_off or mute_toggle. It does not mention scenarios where one might prefer one mute control over another, leaving the agent to infer usage from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mute_toggleA
Toggle le mute du Denon (on/off).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate a mutating, non-idempotent action, and the description adds the concrete on/off toggle semantics. It does not dwell on the dependence on the current mute state, but 'toggle' sufficiently conveys that behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence with no filler. It immediately states the action and the object, which is ideal for such a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter command with no output schema and clear annotations, the description covers the core behavior adequately. However, it omits any reference to the sibling mute_on/mute_off tools, which are needed to fully contextualize this command.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there is nothing for the description to document. The baseline for zero parameters is appropriate here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('toggle') and a clear resource ('le mute du Denon'), and clarifies the on/off behavior. It is more specific than the bare name, but it does not explicitly distinguish itself from the sibling tools mute_on and mute_off.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance about when to use this tool versus mute_on or mute_off, and no mention of prerequisites or context. The intended use is only implied by the word 'toggle'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
power_offAIdempotent
Eteint le Denon AVR (standby).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as mutating (readOnlyHint=false), idempotent, and non-destructive. The description adds the specific behavioral nuance that the action puts the device into standby, not a hard power cut. This is useful context beyond the raw annotations, and there is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short sentence with zero filler. The action is front-loaded, and the standby clarification is parenthetical and efficient. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a simple, zero-parameter command with no output schema. The description fully explains what the tool does and its effect. There is no missing information that an agent would need to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the input schema fully documents the calling surface. With 0 params, the baseline is 4, and the description has no obligation to explain parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Eteint' = turns off), a specific resource ('Denon AVR'), and a mode ('standby'). This clearly differentiates it from siblings like power_on, volume_set, and get_status without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description makes the intended use evident: powering off the Denon AVR. It doesn't explicitly name alternatives or exclude other tools, but the sibling context is unambiguous—there is no competing tool for turning off the device. A clear context with no exclusions merits a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
power_onAIdempotent
Allume le Denon AVR.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses only the basic state change and adds no behavioral context beyond the annotations, such as boot delay, already-on behavior, or confirmation of success. The annotations already cover idempotency and non-destructive intent, so the description adds little transparency value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one short, front-loaded sentence that contains exactly the necessary information and no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless power-toggle command with annotations covering idempotency and non-destructive behavior, the description is largely complete. It could add a note on how to confirm the power-on result, but that is not essential for such a direct action.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters with 100% coverage, so there is nothing for the description to explain about parameters. This matches the baseline of 4 for a parameterless tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
“Allume le Denon AVR” uses a direct verb and names the exact resource, so the intended action is unmistakable. It clearly conveys the on/off semantics that separate it from power_off, though it does not explicitly call out sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this tool when the Denon AVR should be powered on. However, it does not explicitly mention alternatives or exclusions, such as when to prefer power_off, get_status, or set_input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_inputAIdempotent
Change la source d'entree du Denon (BD, TV, GAME, SAT/CBL, DVD, MPLAY).
| Name | Required | Description | Default |
|---|---|---|---|
| source | Yes | Source (ex: BD, TV, GAME, SAT/CBL, DVD, MPLAY) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a mutation (readOnlyHint=false), idempotent, and non-destructive. The description simply restates the action of changing the input source; it adds no extra behavioral context such as whether the device must be powered on or how errors are reported.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single clear sentence that front-loads the action and resource, followed by a parenthetical list of valid values. No filler or redundant content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple setter with one required parameter and no output schema, the description fully conveys the tool's purpose and valid values. There is no missing information needed to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents the 'source' parameter. The description lists the same example values and adds no new meaning beyond confirming the valid set, which is also present in the schema's description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Change' with a resource 'la source d'entree' (input source) of the Denon, and enumerates the exact valid values (BD, TV, GAME, SAT/CBL, DVD, MPLAY). This clearly distinguishes it from sibling tools which handle volume, mute, power, and status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context: it is for changing the Denon's input source, and the sibling tools cover different functions (volume, power, mute). It does not explicitly name alternatives or exclusions, but the intended usage is unambiguous given the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_downA
Baisse le volume du Denon.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Nombre de fois a baisser (default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the mutation profile (readOnlyHint=false, idempotentHint=false, destructiveHint=false). The description adds that the tool decrements the current volume state, but it does not mention edge behavior at minimum volume or the cumulative effect of repeated calls. No 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and object appear immediately. Nothing could be trimmed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple command with one optional, well-documented parameter, the description plus schema is nearly sufficient. It does not state behavior at minimum volume or exactly how step maps to physical presses, but those are minor gaps for this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the step parameter is fully documented with min/max/default and a human-readable explanation. The description itself adds no parameter-specific semantics, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a concrete verb ('Baisse') and a clear target ('le volume du Denon'), so an agent knows exactly what the tool does. It does not explicitly contrast with sibling tools like volume_set or volume_up, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: use this tool when the goal is to lower the Denon volume. However, it does not state when not to use it or point to alternatives such as volume_set for absolute control or volume_up for increasing volume.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_setAIdempotent
Regle le volume du Denon a un niveau specifique (0-98). 80 = 0dB reference.
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | Niveau de volume (0-98) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey mutation, idempotency, and non-destructiveness. The description adds useful behavioral context beyond the schema by providing the calibration '80 = 0dB reference', which helps the agent reason about the resulting loudness. No contradictory claims.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, no filler. The core operation is front-loaded and the calibration note is placed second; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter setter with annotations covering safety and idempotency and schema covering the range, the description is complete. No output schema is needed for this kind of command-style tool, and the 0dB calibration fills the only interpretive gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single level parameter already has type, range, and description. The description still adds meaning by interpreting the numeric scale with the 0dB reference at 80, which is more actionable than the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Règle' / sets), a specific resource ('volume du Denon'), and explicit target semantics ('niveau spécifique 0-98'). This distinguishes it clearly from volume_up, volume_down, and mute_* siblings because it describes absolute level setting, not relative or mute behavior.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'à un niveau spécifique' clearly implies absolute setting, which distinguishes this from the relative sibling tools volume_up and volume_down. It does not explicitly state 'use this for exact level, use volume_up/down for steps', but the context is clear enough for an agent to infer when to choose it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
volume_upC
Augmente le volume du Denon.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Nombre de fois a augmenter (default: 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate the tool is not read-only (readOnlyHint=false) and has open-world side effects (openWorldHint=true). The description adds no behavioral context beyond the basic action; it does not disclose any side effects, state changes, prerequisites, or failure modes. While it does not contradict annotations, it provides zero added value over the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that immediately states the purpose without any fluff. It is front-loaded and every word earns its place. This is a model of conciseness for a simple tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool mutates state (readOnlyHint=false) and has open-world behavior (openWorldHint=true), the description is incomplete. It does not mention any caveats (e.g., what happens at maximum volume), how results are returned (no output schema), or any prerequisites. The one-sentence description leaves out important context an agent would need to use it safely and effectively. Even for a simple tool, more context is required when annotations already signal mutating behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the sole parameter 'step' with a clear description ('Nombre de fois a augmenter (default: 1)') and bounds (min/max). Since schema description coverage is 100%, the baseline is 3, and the tool description adds no additional meaning to the parameter. The description's mention of 'augmente' implicitly relates to the step, but this is redundant with the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Augmente') and resource ('le volume du Denon'), making the action obvious. It distinguishes from volume_down and mute tools by use of 'augmente', but it does not explicitly differentiate from volume_set or mention the incremental nature, which is implied rather than stated. This is clear but lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 its siblings. The description only states the action, leaving the agent to infer usage from the verb. No alternatives are mentioned, no exclusions are provided, and no context about preferred scenarios is given. This falls short of even implied usage guidelines beyond the basic action.
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.
10 tool updates
v0.3.1- First observed
get_status - First observed
mute_off - First observed
mute_on - First observed
mute_toggle - First observed
power_off - First observed
power_on - First observed
set_input - First observed
volume_down - First observed
volume_set - First observed
volume_up
TDQS
Scored across 10 tools
Most tools target distinct actions: volume control, mute control, power control, status, and input selection. The only minor overlap is mute_on/mute_off/mute_toggle, where toggle is redundant with the explicit setter tools, but descriptions are clear enough to avoid serious confusion.
Tool names mostly follow a predictable snake_case pattern with noun prefixes like volume_, mute_, power_. Minor inconsistency exists with get_status and set_input, which place the verb first, but this is still readable and clearly structured.
Ten tools is well-scoped for a Denon AVR control server. Every tool covers a meaningful function: volume, mute, power, status, and input, without unnecessary bloat or trivial duplicates.
The core AV receiver control surface is covered: volume adjust and set, mute control, power on/off, status retrieval, and input selection. Minor gaps exist such as missing per-zone controls or more advanced audio settings, but the essential operations are complete.
Maintenance
Related MCP Connectors
Control a Loxone Miniserver smart home: lights, blinds, climate, scenes and energy.
Drive WhatsApp from any MCP client: pair devices, send text and media, manage contacts and groups.
Sonos MCP server: control your Sonos speakers from any MCP client. Play songs, artists and playlists, set volume, group rooms, move music to another room, switch to TV, spoken announcements and reminders. 27 tools, English and Chinese. Works through the official Sonos cloud, so there is no home bridge to install; sign in with OAuth. Requires the free ZoneFoundry iOS app.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables full control of an Apple TV over the local network, including playback, remote navigation, app launching, deep links, and power management.13MIT
- AlicenseAqualityBmaintenanceEnables controlling Bluesound/BluOS players with transport, volume, multi-room grouping, presets, and search/play across streaming services like TIDAL and TuneIn.19MIT
- FlicenseAqualityCmaintenanceEnables MCP clients to control Sony Bravia TVs over the local network, including power, HDMI inputs, apps, volume, and mute through the TV's JSON-RPC API.8-
- AlicenseNot gradedqualityCmaintenanceEnables discovering, pairing with, and controlling Samsung Tizen TVs on a local network.2 npmMIT