Skip to main content
Glama

sony-bravia-mcp

MCP server for Sony Bravia TVs. Control power, HDMI inputs, apps and volume through the TV's built-in JSON-RPC API. Works with Claude Desktop, Cursor, Vibe, or any MCP client — over stdio or HTTP.

Built with FastMCP, httpx and Pydantic.

Requirements

  • A Sony Bravia TV on the local network (2019+ models with the Sony BRAVIA Professional API)

  • A Pre-Shared Key: on the TV, enable Settings > Network & Internet > Home Network > IP Control > Authentication and set a PSK

Related MCP server: MCP Remote Control

Install

pip install -e .
cp .env.example .env   # set BRAVIA_HOST and BRAVIA_PSK

The .env file is loaded automatically; no source needed.

MCP configuration

{
  "mcpServers": {
    "bravia": {
      "command": "bravia-mcp",
      "env": {
        "BRAVIA_HOST": "192.168.1.42",
        "BRAVIA_PSK": "your-pre-shared-key"
      }
    }
  }
}

The server starts even with the TV off or unplugged: the first tool call returns a TV_UNREACHABLE error with a hint instead of crashing.

HTTP transport

stdio is the default. To serve over HTTP instead:

bravia-mcp --transport http              # 127.0.0.1:8000/mcp
bravia-mcp --transport http --host 0.0.0.0 --port 9000
{
  "mcpServers": {
    "bravia": {
      "url": "http://127.0.0.1:8000/mcp"
    }
  }
}

Tools

Tool

Description

get_tv_state

Consolidated state: power, input, volume, mute. Never fails as a whole

list_inputs

HDMI inputs, CEC/HDMI deduplicated by port

list_apps

Installed apps (6 h cache, refresh=true to bypass)

set_power

On/off, Wake-on-LAN fallback on power-on

set_input

Switch input by exact name (case-insensitive)

launch_app

Launch app by exact title (case-insensitive)

set_volume

Absolute level or relative delta, capped at BRAVIA_MAX_VOLUME

set_mute

Mute/unmute

set_input and launch_app take the exact name returned by list_inputs / list_apps. No fuzzy matching: the caller sees the list and picks. Unknown names come back with the available list.

Every tool returns either the expected payload or an error object with error, message and hint — never an exception.

CLI

The client layer is usable on its own, without MCP:

bravia state                    # consolidated state
bravia inputs                   # list inputs
bravia input "Apple TV"         # switch input
bravia apps                     # list apps
bravia app "YouTube"            # launch app
bravia power on|off
bravia volume --level 20        # or --delta -5
bravia mute on|off
bravia methods                  # API methods supported by this firmware
bravia -v state                 # debug traces

Design notes

  • CEC/HDMI deduplication — one connector appears twice in the TV's response; merged by port, with CEC names preferred.

  • Wire hygiene — the TV emits HTML entities and non-breaking spaces in app titles (Play\xa0Store, Décor d'intérieur); decoded on arrival.

  • Retries — exponential backoff on network errors and 5xx, never on application errors. One JSON-RPC call in flight at a time: the TV's API handles concurrency poorly.

  • Partial degradation — unreadable fields are listed in stale_fields instead of failing the whole state.

Known limits

  • No now-playing information: the TV does not expose it over this API.

  • Volume is capped client-side (BRAVIA_MAX_VOLUME, default 40).

  • Selecting an input may wake the device via CEC as a side effect.

  • The PSK travels in cleartext over HTTP — it is never logged and never accepted as a command-line argument. Environment variable only.

  • Wake-on-LAN is unreliable over Wi-Fi (randomized MAC).

Tests

pytest

63 tests against a fake TV replaying real K-55XR8M2 responses. No network access. ruff, mypy (strict) and basedpyright are part of the checks.

Available Tools

8 tools
get_tv_stateGet Tv StateA

État consolidé de la TV : alimentation, entrée active, application au premier plan, volume, muet.

Retourne un objet avec power ("active" ou "standby"), input (nom et URI de l'entrée active), foreground_app, volume, muted, reachable et stale_fields (champs non lus). Ne échoue jamais si la TV répond partiellement.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden. It discloses the consolidated nature of the result, defines each returned field, and explicitly states that the tool never fails even when the TV responds partially. It also mentions reachable and stale_fields, giving agents important context about partial data. It does not explicitly claim to be side-effect-free, but the getter semantics make that evident.

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?

The description opens with a one-line summary of what is returned, then gives the precise object shape and a key behavioral guarantee. Every sentence adds value, and the structure is front-loaded with the most important information.

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

Completeness5/5

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

For a getter with no inputs, this description is complete enough for an agent to select and invoke it correctly. It explains return fields, the meaning of each, the partial-response behavior, and the consolidated nature that differentiates it from siblings. The presence of an output schema also reduces the need for detailed return-value documentation.

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 has zero parameters, and the input schema covers 100% of the (empty) parameter surface. The baseline for a no-parameter tool is 4, as there is no parameter documentation burden for the description to carry.

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

Purpose5/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 ('État consolidé de la TV') and enumerates the exact fields returned: power, input, foreground_app, volume, muted, reachable, and stale_fields. This clearly distinguishes it from sibling tools that either set values (set_power, set_input, set_volume) or list discrete items (list_inputs, list_apps), making it the only tool that returns a consolidated snapshot.

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

Usage Guidelines4/5

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

The description clearly implies when to use this tool: whenever the current consolidated TV state is needed, including power status, active input, foreground app, volume, and mute. It does not explicitly state 'use list_inputs to enumerate inputs' or mention when not to use this tool, but the scope of sibling tools makes the intended context reasonably clear.

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

launch_appLaunch AppA

Lance une application par son titre exact.

Le titre doit être celui retourné par list_apps (la casse est ignorée). Un titre inconnu retourne une erreur APP_NOT_FOUND avec la liste available. Retourne l'état consolidé après la commande.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations provided, the description carries the full disclosure burden and does so substantively: it reveals case-insensitive matching, the precise error contract (APP_NOT_FOUND plus an `available` list), and the return behavior (the consolidated state after the command). This is meaningful behavioral context far beyond a bare "launches an app." It does not address idempotency — what happens if the target app is already running — which would push it to a 5.

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?

Four short sentences, each earning its place: purpose, input sourcing, error behavior, and return value. The purpose is front-loaded in the first sentence, and every sentence adds information absent from the schema. This is high-density prose with zero waste.

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 single-parameter tool with an output schema present, the description covers what the tool does, where the parameter comes from, what failures look like, and what is returned. The only notable gap is clarity around side effects (e.g., whether launching changes the active input, relevant given the set_input sibling) and behavior when the app is already active. These are minor against the tool's low complexity.

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

Parameters5/5

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

Schema description coverage is 0%, so the lone `name` string parameter carries no documentation in the schema. The description fully compensates: the value must be an exact title from list_apps, matching is case-insensitive, and invalid values produce a known error with a recovery list. Nothing is left ambiguous about how to populate this parameter.

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

Purpose5/5

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

The opening sentence, "Lance une application par son titre exact," names a specific verb (launch) and resource (application by exact title). This clearly separates launch_app from all siblings — set_power, set_input, list_apps, get_tv_state, etc. — none of which perform app launching. The tool name and description are coherent, giving an agent an unambiguous mental model.

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

Usage Guidelines4/5

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

The description establishes the key prerequisite: "Le titre doit être celui retourné par list_apps," telling the agent exactly where to obtain a valid value. It also prepares the agent for invalid input by specifying the APP_NOT_FOUND error and the `available` list it returns, enabling an implicit retry workflow. It stops short of a 5 because it never explicitly contrasts this tool with alternatives such as set_input for changing the active source.

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

list_appsList AppsA

Applications installées sur la TV, indexées par titre.

Chaque application a un title convivial et une uri opaque. Utilisez le title avec launch_app. La liste est mise en cache 6 heures ; passez refresh=true pour la forcer.

ParametersJSON Schema
NameRequiredDescriptionDefault
refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/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 discloses caching for 6 hours, the refresh=true override, and the structure of entries (title and uri). This is strong transparency for a simple read-only listing tool, though it does not mention possible errors or edge cases.

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?

The description is tightly written in three short sentences, each earning its place: purpose, field semantics, and cache/refresh behavior. It is front-loaded with the core purpose and contains no filler.

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

Completeness5/5

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

For a single-optional-parameter tool, this description is fully sufficient: it explains what is returned, how to use the returned data, and the only parameter's behavior. The output schema is also present, so return-value details need not be repeated.

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%, so the description must compensate. It does: it explains what refresh=true does, the 6-hour cache default, and how the fields map to use with launch_app. This gives the agent more than the raw schema does.

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

Purpose5/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: listing applications installed on the TV, indexed by title. It also clarifies the data model (title vs. uri), making the tool's purpose unambiguous and easy to distinguish from the sibling tools like launch_app or list_inputs.

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

Usage Guidelines4/5

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

The description clearly tells the agent to use the returned 'title' together with launch_app, providing practical integration context. It does not explicitly say when not to use this tool or name alternatives, but the intended place in the workflow is clear enough.

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

list_inputsList InputsA

Entrées HDMI de la TV, dédupliquées CEC/HDMI par port.

Chaque entrée a un name convivial, une uri opaque, un port, un kind, un connected (true si le périphérique est détecté) et un active. Utilisez le name avec set_input.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations present, the description carries the burden of behavioral disclosure. It discloses the deduplication behavior and explains the meaning of 'connected' and 'active', which helps the agent understand the returned data and infer read-only semantics. It does not explicitly state that the operation is read-only, but 'list' strongly implies it.

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?

The description is compact and front-loaded with the core purpose: listing deduplicated HDMI inputs. Every sentence adds value, and the final sentence provides cross-tool guidance without any filler.

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

Completeness5/5

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

For a zero-parameter tool, the description is complete: it specifies the input source, deduplication behavior, all relevant output fields and their meaning, and how to chain the result into set_input. Nothing essential is missing for an agent to invoke and use this tool correctly.

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 has zero parameters, so the input schema provides nothing to clarify and the description does not need to explain parameter usage. The baseline for zero-parameter tools is 4, and the description appropriately focuses on output fields instead.

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

Purpose5/5

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

The description states the tool returns the TV's HDMI inputs, deduplicated by CEC/HDMI per port, and enumerates the exact fields returned. This clearly identifies the resource and distinguishes it from sibling list_apps, which would cover apps rather than HDMI inputs.

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

Usage Guidelines4/5

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

The description explicitly tells the agent to use the returned 'name' value with set_input, which is direct and actionable guidance for the intended workflow. It does not explicitly state when not to use this tool versus alternatives, but the HDMI-focused scope makes the primary use case clear.

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

set_inputSet InputA

Sélectionne une entrée HDMI par son nom exact.

Le nom doit être celui retourné par list_inputs (la casse est ignorée). Un nom inconnu retourne une erreur INPUT_NOT_FOUND avec la liste available. Sélectionner une entrée peut réveiller le périphérique via CEC. Retourne l'état consolidé après la commande.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

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

This description goes beyond the input schema by disclosing several important behaviors: the dependency on list_inputs, case-insensitivity, the exact error type and payload for unknown names, the side effect of waking the device via CEC, and the return of consolidated state. With no annotations provided, the description carries the full burden, and it does so thoroughly.

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?

Four short sentences, each carrying distinct information: the action, the source of valid values, error behavior, and side effects plus return value. It is front-loaded and free of redundancy.

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

Completeness5/5

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

For a tool with one string parameter, the description covers the source of valid values, error handling, side effects, and the return value. Combined with an output schema for the consolidated state, there are no significant gaps.

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 input schema only defines a string parameter `name` with no description, so coverage is 0%. The description compensates by explaining that the name must be exactly the one returned by list_inputs and that case is ignored. It doesn't provide examples or format details, but for a single simple parameter this is sufficient.

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 clearly states the tool selects an HDMI input by its exact name, which is a specific verb-resource pairing. It does not explicitly contrast with sibling tools such as list_inputs or set_power, but the action is distinct enough that an agent can infer it is for input selection.

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

Usage Guidelines4/5

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

The description provides clear usage context: the name must come from list_inputs, case is ignored, and unknown names return INPUT_NOT_FOUND with an `available` list. It does not explicitly say when not to use this tool or name an alternative, but the exact-name requirement and error behavior give practical guidance.

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

set_muteSet MuteA

Active ou désactive le mode muet.

on=true coupe le son, on=false le rétablit. Retourne l'état consolidé après la commande.

ParametersJSON Schema
NameRequiredDescriptionDefault
onYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full transparency burden. It explains the exact behavior for on=true and on=false and states that it returns the consolidated state after the command. This is good behavioral disclosure for a simple one-parameter tool, though it does not mention edge cases like idempotency or device power state.

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?

The description is two short sentences with no filler. The first sentence states the purpose, and the second explains the parameter and return behavior, front-loading the most essential information.

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-boolean-parameter tool with an output schema, the description is nearly complete: it explains purpose, parameter semantics, and the return value. It lacks explicit 'when to use' context, but that is a minor gap given how straightforward the tool is.

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

Parameters5/5

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

The schema only defines a boolean named 'on' with no description coverage. The tool description compensates fully by explicitly stating that on=true cuts sound and on=false restores it, making the parameter's meaning unambiguous.

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 clearly states the action: activating or deactivating mute mode, with a specific verb and resource. It is easily distinguishable from the sibling volume control tool, even though it does not explicitly name an alternative.

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 intended usage is implied by the verb and the boolean parameter: use this when you want to mute or unmute audio. However, there is no explicit guidance about when not to use it or how it differs from set_volume or set_power.

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

set_powerSet PowerA

Allume ou éteint la TV.

on=true allume (avec repli Wake-on-LAN si l'API est injoignable), on=false met en veille. Retourne l'état consolidé après la commande.

ParametersJSON Schema
NameRequiredDescriptionDefault
onYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations provided, the description carries full behavioral disclosure. It explicitly reveals that `on=true` falls back to Wake-on-LAN if the API is unreachable, `on=false` puts the TV into standby, and the response returns the consolidated state after the command. This is rich, useful behavioral context beyond the raw 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?

The description is three short sentences with no filler. It front-loads the core action, then adds parameter semantics, and ends with the return behavior. Every sentence earns its place.

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

Completeness5/5

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

For a single-parameter tool with an output schema available, this description is complete: it covers the action, the parameter semantics, edge-case fallback behavior, and the response concept. Nothing critical is missing for an agent 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.

Parameters5/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. It fully explains the single boolean parameter: `on=true` means power on with a WoL fallback, and `on=false` means standby. This meaning is completely absent from the schema, which only declares the type as boolean.

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

Purpose5/5

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

The description uses a specific verb and resource: 'Allume ou éteint la TV' (turns the TV on or off), making the tool's sole purpose unmistakable. It is clearly distinguished from siblings like set_input, set_volume, and set_mute by focusing on power state only.

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

Usage Guidelines4/5

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

The description implies clear usage: call this tool whenever the TV needs to be powered on or off, using the boolean `on` parameter. It does not explicitly name alternatives or state when not to use it, but the context is unambiguous and no exclusions are needed given the tool's narrow scope.

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

set_volumeSet VolumeA

Règle le volume : level pour une valeur absolue, delta pour un ajustement relatif.

Fournissez exactement un des deux paramètres. Le volume est plafonné côté client (40 par défaut). Retourne l'état consolidé après la commande.

ParametersJSON Schema
NameRequiredDescriptionDefault
deltaNo
levelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral disclosure burden, and it does well by revealing the client-side cap (40 by default), the exclusivity constraint, and that it returns consolidated state after the command. It does not mention persistence, permissions, or mute interaction, but these are less critical for a volume-setting 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?

Three compact sentences deliver all essential information with no filler. The parameter semantics are front-loaded, followed by the constraint, the cap, and the return behavior.

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

Completeness5/5

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

For a simple two-parameter tool with an output schema available, the description is complete: it explains both parameter choices, the one-of rule, the volume cap, and the return value. No critical information needed to invoke the tool correctly is missing.

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

Parameters5/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 fully does: it explains that `level` sets an absolute value, `delta` makes a relative adjustment, and exactly one must be provided. This gives the agent actionable meaning beyond the raw schema defaults.

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

Purpose5/5

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

The description states a clear action ('Règle le volume') on a specific resource (volume) and immediately distinguishes the two operational modes: absolute (`level`) and relative (`delta`). This makes it easy to differentiate from sibling tools like set_mute or set_power.

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

Usage Guidelines4/5

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

The description gives explicit usage direction: use exactly one of `level` or `delta`, choosing based on whether an absolute value or a relative adjustment is needed. It does not explicitly compare itself to sibling tools, but the resource and behavior are distinct enough that the guidance is clear.

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. Dates show when Glama detected each change.

  1. 8 tool updatesv0.1.0
    • First observedget_tv_state
    • First observedlaunch_app
    • First observedlist_apps
    • First observedlist_inputs
    • First observedset_input
    • First observedset_mute
    • First observedset_power
    • First observedset_volume

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct concern: state read, input listing, app listing, power, input selection, app launch, volume, and mute. There is no meaningful overlap between tools, and the descriptions clearly separate current-state queries from available-resource enumerations.

Naming Consistency5/5

All tool names follow a consistent action_noun pattern using lowercase snake_case: get_, list_, set_, and launch_. The verbs clearly distinguish read operations from control operations, and every noun identifies the resource being acted on.

Tool Count5/5

Eight tools is well within the ideal range for a TV control server. Each tool covers a necessary capability without redundancy or feature bloat.

Completeness4/5

The set covers the core TV control lifecycle: state, power, inputs, apps, volume, and mute. Advanced operations like remote-key commands or media playback are absent, but they are not essential for the apparent purpose of basic Bravia control.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/MaximeLglr/sony-bravia-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server