sony-bravia-mcp
Allows control of Sony Bravia TVs, including power, HDMI input selection, app launching, volume and mute control through the TV's built-in JSON-RPC API.
Click on "Install 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., "@sony-bravia-mcpTurn on the TV and switch to the Apple TV input."
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.
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_PSKThe .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 |
| Consolidated state: power, input, volume, mute. Never fails as a whole |
| HDMI inputs, CEC/HDMI deduplicated by port |
| Installed apps (6 h cache, |
| On/off, Wake-on-LAN fallback on power-on |
| Switch input by exact name (case-insensitive) |
| Launch app by exact title (case-insensitive) |
| Absolute |
| 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 tracesDesign 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_fieldsinstead 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
pytest63 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 toolsget_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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| on | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| on | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| delta | No | ||
| level | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
8 tool updates
v0.1.0- First observed
get_tv_state - First observed
launch_app - First observed
list_apps - First observed
list_inputs - First observed
set_input - First observed
set_mute - First observed
set_power - First observed
set_volume
TDQS
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.
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.
Eight tools is well within the ideal range for a TV control server. Each tool covers a necessary capability without redundancy or feature bloat.
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
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
Control Android TV from any AI. 38 MCP tools: playback, recap, recommend, smart-home, schedules.
Trakt MCP — TV/movie metadata + watch tracking signals
Unlock a world of television with the TV Maze MCP server. Effortlessly search for shows by name or
Drive WhatsApp from any MCP client: pair devices, send text and media, manage contacts and groups.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables control of Kodi media center through MCP protocol, supporting playback control, library management, navigation, and smart downloads search with automatic file playback.5MIT
- FlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to control TVs on a local network through natural language commands. It currently supports Roku devices, allowing users to launch apps, manage playback, and navigate menus.5-
- FlicenseNot gradedqualityBmaintenanceEnables remote control of audio playback and system volume on a Raspberry Pi via the Model Context Protocol (MCP).-
- FlicenseNot gradedqualityDmaintenanceEnables control of Sony TVs via IRCC remote commands through Model Context Protocol.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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