Fibaro MCP
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., "@Fibaro MCPturn on the living room lights"
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.
Fibaro MCP Server
Fibaro Home Center integration for the Model Context Protocol (MCP).
Use it with MCP-capable clients (Claude Desktop, Cursor, VS Code extensions, etc.) to control devices, run scenes, manage variables, and administer your Fibaro system.
Features
Device Control
List and filter devices by room or type
Get detailed device information and current state
Control devices with various actions (on/off, dimming, color control)
Support for lights, switches, thermostats, and more
v3: Bulk operations for multiple devices at once
Scene Management
List all available scenes
Get detailed scene information
Execute and stop scenes programmatically
v3: Scene templates with parameter substitution
v3: Lua REPL for interactive testing
Room & Section Management
List all rooms and sections in your home
Filter devices and scenes by room
System Integration
Access global variables
Get system information
Retrieve weather data
Monitor energy consumption
v3: System backup and restore
v3: Webhook server and MQTT bridge
Analytics & History (v3)
Device usage patterns and statistics
Scene execution history and performance
Energy consumption trends
System health monitoring
Analytics dashboard
Automation Builder (v3)
Visual automation creation with JSON
Multi-condition triggers (AND/OR logic)
Device state, time, and variable conditions
Generates valid Fibaro Lua code
Related MCP server: HC3 MCP Server
Installation
Recommended (published package)
Most users should not need to clone this repo. Configure your MCP client to run the server via npx:
{
"command": "npx",
"args": ["-y", "fibaro-mcp"]
}From source (development)
npm install
npm run buildConfiguration
You can configure the server in three ways (in priority order):
FIBARO_HOST/FIBARO_USERNAME/FIBARO_PASSWORDenv vars (explicit)FIBARO_CONFIG=/absolute/path/to/fibaro.json(single config file).envfile (loaded automatically when the server starts)
FIBARO_HOST: The hostname or IP address of your Fibaro Home Center (required)FIBARO_USERNAME: Your Fibaro username (required)FIBARO_PASSWORD: Your Fibaro password (required)FIBARO_PORT: The port number (optional, defaults to 443 for HTTPS, 80 for HTTP)FIBARO_HTTPS: Whether to use HTTPS (optional, defaults to true)
Tool listing mode:
FIBARO_TOOLSET:intent(default),legacy, orboth
Example Configuration
export FIBARO_HOST="192.168.1.100"
export FIBARO_USERNAME="admin"
export FIBARO_PASSWORD="your-password"
export FIBARO_PORT="443"
export FIBARO_HTTPS="true"Example FIBARO_CONFIG
Create a JSON file anywhere on disk (do not commit it), e.g. ~/fibaro-mcp.json:
{
"host": "192.168.1.100",
"username": "admin",
"password": "your-password",
"port": 443,
"https": true
}Then set:
export FIBARO_CONFIG="$HOME/fibaro-mcp.json"Example .env
Create .env next to where you run the server:
FIBARO_HOST=192.168.1.100
FIBARO_USERNAME=admin
FIBARO_PASSWORD=your-password
FIBARO_PORT=443
FIBARO_HTTPS=trueSetup (common MCP clients)
The server communicates over stdio. Most clients need:
Command:
npx(recommended) ornode(local checkout)Args:
[-y, fibaro-mcp](recommended) or[/absolute/path/to/repo/dist/index.js]Env: either
FIBARO_CONFIGorFIBARO_HOST/FIBARO_USERNAME/FIBARO_PASSWORD
Agent-assisted setup (recommended)
If configuration is missing, instruct the agent to call the first_run tool.
The server will start even without Fibaro credentials so the agent can do this.
Example:
Call:
first_runOptionally provide:
client,os,repo_path,fibaro_host,fibaro_username,fibaro_https,fibaro_port
The tool returns:
commands to build (
npm install,npm run build)a template
fibaro-mcp.jsonforFIBARO_CONFIGa ready-to-paste MCP client configuration snippet
Security: don’t paste passwords into chat logs; don’t commit fibaro-mcp.json or .env.
Claude Desktop
Add this configuration to your Claude Desktop config file:
MacOS
~/Library/Application Support/Claude/claude_desktop_config.json
Windows
%APPDATA%/Claude/claude_desktop_config.json
{
"mcpServers": {
"fibaro": {
"command": "npx",
"args": ["-y", "fibaro-mcp"],
"env": {
"FIBARO_CONFIG": "/absolute/path/to/fibaro-mcp.json",
"FIBARO_TOOLSET": "intent"
}
}
}
}Cursor
Add the MCP server entry in Cursor’s MCP settings (JSON). Use the same structure as Claude Desktop:
{
"mcpServers": {
"fibaro": {
"command": "npx",
"args": ["-y", "fibaro-mcp"],
"env": {
"FIBARO_CONFIG": "/absolute/path/to/fibaro-mcp.json"
}
}
}
}VS Code (MCP-capable extensions)
Most MCP extensions use the same command/args/env shape. Prefer FIBARO_CONFIG so you don’t copy credentials into multiple places.
Available Tools
By default, you'll see a small "intent" toolset:
fibaro_device- Device control and infofibaro_scene- Scene managementfibaro_variable- Global variablesfibaro_quick_app- Quick App managementfibaro_home- System info, weather, energy, rooms, sections, and more
v3 Tools (also included by default)
fibaro_template- Scene templates with parameter substitutionfibaro_history- Device state historyfibaro_scene_history- Scene execution historyfibaro_backup- System backup and restore (JSON/YAML)fibaro_repl- Interactive Lua REPL sandboxfibaro_bulk- Bulk device operationsfibaro_analytics- Usage analytics and system healthfibaro_energy_graph- Historical power/energy datafibaro_integration- Webhook server and MQTT bridgefibaro_automation- Automation builder (generates Lua)
All v3 tools use the op parameter (e.g., fibaro_analytics op=dashboard).
See FEATURES.md for the complete list of operations per tool.
You can also expose legacy tools with FIBARO_TOOLSET=legacy or FIBARO_TOOLSET=both.
Device Management
list_devices
List all devices in your Fibaro system.
Optional filters:
room_id,type
get_device
Get detailed information about a specific device.
Parameters:
device_id
control_device
Execute any action on a device.
Parameters:
device_id,action,args(optional)
turn_on
Turn on a device (light, switch, etc.).
Parameters:
device_id
turn_off
Turn off a device.
Parameters:
device_id
set_brightness
Set brightness level for dimmable lights.
Parameters:
device_id,level(0-100)
set_color
Set RGB color for color-capable lights.
Parameters:
device_id,r,g,b,w(optional)
set_temperature
Set target temperature for thermostats.
Parameters:
device_id,temperature
Scene Management
list_scenes
List all scenes in the system.
Optional filter:
room_id
get_scene
Get detailed information about a specific scene.
Parameters:
scene_id
run_scene
Execute a scene.
Parameters:
scene_id
stop_scene
Stop a running scene.
Parameters:
scene_id
Room & Section Management
list_rooms
List all rooms in the system.
list_sections
List all sections in the system.
Global Variables
list_global_variables
List all global variables.
get_global_variable
Get the value of a specific global variable.
Parameters:
name
set_global_variable
Set the value of a global variable.
Parameters:
name,value
System Information
get_system_info
Get Fibaro Home Center system information.
get_weather
Get current weather information.
get_energy_panel
Get energy consumption data.
Lua Script Management
get_scene_lua
Get the Lua script code from a scene.
Parameters:
scene_id
create_scene
Create a new Lua scene.
Parameters:
name,room_id,lua(optional)
update_scene_lua
Update the Lua code of an existing scene.
Parameters:
scene_id,lua(optional),name(optional),room_id(optional)
delete_scene
Delete a scene.
Parameters:
scene_id
list_quick_apps
List all Quick Apps (Lua-based applications) in the system.
get_device_lua
Get Lua code and Quick App variables from a device.
Parameters:
device_id
create_quick_app
Create a new Quick App (Lua application).
Parameters:
name,type,code(optional),room_id(optional)
update_quick_app_code
Update the Lua code of a Quick App.
Parameters:
device_id,code
update_quick_app_variables
Update Quick App variables.
Parameters:
device_id,variables(array)
delete_device
Delete a device (including Quick Apps).
Parameters:
device_id
Available Resources
The server provides the following resources that can be accessed through the MCP protocol:
fibaro://devices- Current state of all devicesfibaro://rooms- List of all roomsfibaro://scenes- List of all scenesfibaro://system- System informationfibaro://weather- Current weather
Example Interactions
Here are some example prompts you can use with Claude:
"Show me all the lights in my living room"
"Turn off all lights in the bedroom"
"Set the thermostat to 22 degrees"
"What's the current temperature outside?"
"Run the 'Good Night' scene"
"Dim the kitchen lights to 50%"
"Show me all devices that are currently on"
"What's my current energy consumption?"
"Show me the Lua code for scene 10"
"Create a new Lua scene called 'Morning Routine'"
"Update the Lua code in scene 15"
"List all my Quick Apps"
"Create a new Quick App for weather monitoring"
"Update the code in Quick App 42"
"Delete scene 20"
Development
Build
npm run buildDevelopment Mode (watch)
npm run devRun directly
npm startDocumentation
QUICKSTART.md - Getting started guide
EXAMPLES.md - Usage examples
FEATURES.md - Complete feature reference
LUA_MANAGEMENT.md - Lua scene management
v3 Documentation
TEMPLATES.md - Scene templates guide
ANALYTICS.md - Analytics and insights
INTEGRATIONS.md - Webhooks and MQTT
AUTOMATION.md - Automation builder
AI Assistant Usage Tips
When using this MCP server with AI assistants like Claude, follow these guidelines for efficient operation:
Avoid Listing Everything First
Don't start by listing all devices, scenes, or rooms. The full lists can be over 1MB and waste context.
Do use targeted queries:
Ask for a specific device by name:
fibaro_device operation=get name="Kitchen Light"Filter by room:
fibaro_device operation=list room_id=5Get only what you need:
fibaro_scene operation=get id=10
Use Name-Based Lookups
All tools support name-based lookups - you don't need IDs:
fibaro_device operation=control name="Living Room Lamp" action=turnOnfibaro_scene operation=run name="Good Night"fibaro_variable operation=get name=HomeMode
Prefer Intent Tools
The default intent toolset (fibaro_device, fibaro_scene, etc.) combines multiple operations into single tools, reducing API calls.
Check Analytics Instead of Listing
For overview information, use analytics:
fibaro_analytics operation=system_health- Quick health checkfibaro_analytics operation=dashboard- Comprehensive overview
Example Efficient Workflows
# Bad: Lists everything (1MB+)
fibaro_device operation=list
fibaro_scene operation=list
# Good: Targeted queries
fibaro_device operation=get name="Kitchen Light"
fibaro_scene operation=run name="Morning Routine"Development
Use local code with npx-style config
If you want your MCP client config to look like the published npx fibaro-mcp setup but run your local working copy instead:
npm install
npm run build
npm linkThen set your MCP client to run:
Command:
fibaro-mcpArgs:
[]
To undo:
npm unlinkSecurity Notes
The server accepts self-signed certificates by default (common in Fibaro installations)
Credentials are passed via environment variables
All communication with the Fibaro Home Center uses authentication
Consider using HTTPS for production deployments
Troubleshooting
Connection Issues
Verify your Fibaro Home Center is accessible from your network
Check that the hostname/IP address is correct
Ensure the port is correct (default: 443 for HTTPS)
Verify your credentials are correct
Device Control Issues
Check that devices are enabled and visible in the Fibaro interface
Verify the device supports the action you're trying to perform
Check device IDs are correct (use
list_devicesto get IDs)
Scene Issues
Ensure scenes are properly configured in Fibaro
Check scene IDs are correct (use
list_scenesto get IDs)Verify scenes are not already running when starting them
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT
Author
Cezar "ikari" Pokorski
GitHub: @ikari-pl
Email: _@ikari.software
Acknowledgments
Built with the Model Context Protocol SDK by Anthropic.
Available Tools
8 toolsfibaro_deviceA
Device management: list/get/control devices. IMPORTANT: Avoid 'op=list' without filters - it returns 1MB+ of data. Instead: use 'op=get' with 'name' parameter for specific devices, or filter with room_id/type/interface. Supports: turn_on, turn_off, set_brightness, set_color, set_temperature, action, get_lua.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| op | Yes | Operation: list|get|action|turn_on|turn_off|set_brightness|set_color|set_temperature|delete|get_lua | |
| device_id | No | Device ID (required for most ops) | |
| action | No | Fibaro action name (for op=action) | |
| args | No | Action arguments (for op=action) | |
| level | No | Brightness % (op=set_brightness) | |
| r | No | ||
| g | No | ||
| b | No | ||
| w | No | Optional white channel (0-255) | |
| temperature | No | Target temperature °C (op=set_temperature) | |
| room_id | No | Filter for op=list | |
| section_id | No | Filter for op=list | |
| type | No | Filter by Fibaro device type for op=list | |
| base_type | No | Filter by baseType for op=list | |
| name | No | Filter by name (case-insensitive, ignores diacritics) for op=list | |
| interface | No | Filter by interface/capability for op=list | |
| parent_id | No | Filter by parent device ID for op=list | |
| enabled | No | Filter by enabled for op=list | |
| visible | No | Filter by visible for op=list | |
| dead | No | Filter by dead/unresponsive for op=list | |
| properties | No | For op=list: return only selected properties (same as list_devices) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It warns about large data with unfiltered list, but lacks details on authentication, rate limits, side effects of actions (e.g., delete), or response format. Partial disclosure.
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 sentences, front-loaded with purpose, then critical usage advice, then supported operations. 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?
With 22 parameters and no output schema, the description covers usage advice but lacks details on return values, error handling, or parameter dependencies. Adequate but not complete for a complex 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 high (86%), so the description adds minimal extra meaning. It lists supported operations, but those are already in the op parameter description. The 'args' parameter remains undocumented. Baseline score.
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 'Device management: list/get/control devices' and lists specific operations, making the purpose obvious. However, it does not explicitly differentiate from sibling tools like fibaro_home or fibaro_scene, which is a minor gap.
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 explicit guidance: 'Avoid op=list without filters' and recommends using op=get with filters, specifying alternatives and when to use them. This is exemplary usage advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fibaro_homeB
Home/system management: rooms, sections, users, weather, energy_graph, energy_panel, system_info. For quick stats use 'op=device_stats'. For current power consumption use 'op=energy_panel'. For historical energy/power data use 'op=energy_graph'. Supports: rooms, sections, users, profiles, notifications, alarms, zwave, backups, settings, weather, system_info, energy_graph, energy_panel, plugins.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| op | Yes | Operation: system_info|weather|energy_graph|energy_panel|rooms|sections|create_room|update_room|delete_room|create_section|update_section|delete_section|users|create_user|update_user|delete_user|profiles|get_active_profile|set_active_profile|notifications|send_notification|alarms|arm_alarm|disarm_alarm|zwave_network|start_zwave_inclusion|stop_zwave_inclusion|start_zwave_exclusion|stop_zwave_exclusion|remove_failed_zwave_node|heal_zwave_network|create_backup|list_backups|restore_backup|get_settings|update_settings|restart_system|get_event_log|geofences|create_geofence|update_geofence|delete_geofence|plugins|install_plugin|uninstall_plugin|restart_plugin|trigger_custom_event|device_stats|energy_graph|energy_panel | |
| room_id | No | ||
| section_id | No | ||
| name | No | ||
| icon | No | ||
| user_id | No | ||
| username | No | ||
| password | No | ||
| No | |||
| type | No | ||
| profile_id | No | ||
| partition_id | No | ||
| node_id | No | ||
| backup_id | No | ||
| settings | No | ||
| from | No | ||
| to | No | ||
| limit | No | ||
| geofence_id | No | ||
| latitude | No | ||
| longitude | No | ||
| radius | No | ||
| plugin_id | No | ||
| url | No | ||
| event_name | No | ||
| data | No | ||
| notification | No | ||
| title | No | ||
| text | No | ||
| users | No | ||
| device_id | No | ||
| params | No | ||
| aggregation | No | For device_stats: aggregation interval (auto selects based on time span) | |
| max_points | No | For device_stats: max data points (default: 1000) | |
| metrics | No | For device_stats: metrics to include | |
| property | No | For device_stats: legacy property filter | |
| grouping | No | For energy_graph: group by devices or rooms (default: devices) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must convey behavioral traits. It fails to indicate which operations are destructive (e.g., delete_room, restore_backup), required permissions, side effects, or rate limits. The description only lists operations without behavioral context.
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 moderately concise but contains repetition (e.g., 'energy_graph, energy_panel' appears twice). It front-loads the general purpose and then lists supported topics, which is reasonable, but could be more tightly structured.
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 38 parameters and many operations, the description is incomplete. It does not cover all operations, lacks details about return values, error conditions, or prerequisites. It provides only a high-level overview and specific guidance for a few operations.
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?
With only 18% schema description coverage, the description should compensate. It explains a few sub-operations (device_stats, energy_panel, energy_graph) but does not provide semantics for most parameters like room_id, section_id, or the many op enum values. The description adds minimal value beyond 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 the tool's purpose as 'Home/system management' and lists major capabilities (rooms, sections, users, weather, etc.). It distinguishes between sub-operations within the tool, though it does not explicitly differentiate from sibling tools like fibaro_device.
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 explicit guidance for certain operations: 'For quick stats use op=device_stats', 'For current power consumption use op=energy_panel', 'For historical energy/power data use op=energy_graph'. This helps an agent choose the appropriate operation within the tool, though it does not cover all operations or exclude sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fibaro_quick_appB
Quick App intent tool: list/create/update code/update variables/get lua/delete.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| op | Yes | Operation: list|create|update_code|update_variables|get_lua|delete | |
| device_id | No | Quick App device ID | |
| name | No | Quick App name (op=create) | |
| type | No | Quick App type (op=create) | |
| room_id | No | Room ID (op=create) | |
| code | No | Lua code (op=create/update_code) | |
| variables | No | Variables array (op=update_variables) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavioral traits. It only lists operations without mentioning side effects, authentication needs, error handling, or return behavior. For a tool that includes destructive operations like delete, this is insufficient.
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: a single sentence that lists all operations without any redundant phrases. Every word carries meaning, and it is front-loaded for quick scanning.
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 complexity (8 parameters, no output schema, multiple operations), the description is incomplete. It lacks information about return values, error conditions, required permissions, and operation-specific behavior. The agent would not have enough context to use the tool correctly in many scenarios.
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 baseline is 3. The description does not add any meaning beyond what the input schema already provides for each parameter. While the schema descriptions are complete, the tool description itself contributes no extra parameter context.
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's purpose as a 'Quick App intent tool' and enumerates all supported operations (list, create, update code, update variables, get lua, delete). This provides a specific verb+resource combination and differentiates it from sibling tools like fibaro_device or fibaro_scene.
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 alternatives. Sibling tools are listed but without any comparative context or conditions for selection. No when-not-to-use scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fibaro_sceneA
Scene management: list/get/run/stop scenes and Lua code. IMPORTANT: Avoid 'op=list' without filters - use 'op=get' with 'name' or 'id' for specific scenes, or filter by room_id. Supports: run, stop, create, update_lua, get_lua, delete.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| op | Yes | Operation: list|get|run|stop|get_lua|create|update_lua|delete | |
| scene_id | No | ||
| room_id | No | Filter for op=list or target room for op=create/update_lua | |
| name | No | Scene name (op=create/update_lua) | |
| lua | No | Lua code (op=create/update_lua) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must shoulder the behavioral disclosure burden. It mentions operations like run, stop, create, delete, but does not explain side effects (e.g., running a scene triggers actions, deleting removes it permanently). For a tool with destructive operations, this is a gap.
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 sentences with no waste. The critical usage advice is front-loaded with 'IMPORTANT'. Every word adds value.
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 6 parameters and moderate complexity, the description covers the main point but lacks details on return values (no output schema) and behavioral effects of mutations. It is adequate but not fully complete for safe autonomous use.
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 83% (5/6 parameters described). The description adds nuance: it clarifies that 'name' can be used with 'op=get' (though schema only lists 'name' for create/update_lua) and that 'room_id' can filter 'list' operations. This goes beyond the schema's own descriptions.
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 'Scene management: list/get/run/stop scenes and Lua code' and lists all supported operations, leaving no ambiguity about the tool's purpose. It differentiates from sibling tools like fibaro_device or fibaro_home by focusing on scenes.
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 explicit 'IMPORTANT' guidance on when to use 'list' vs 'get', including filtering advice for efficiency. However, it does not compare this tool to sibling tools like resolve_by_name or first_run, so cross-tool guidance is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fibaro_variableC
Variable intent tool: list/get/set/create/delete global variables.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| op | Yes | Operation: list|get|set|create|delete | |
| name | No | Variable name | |
| value | No | Variable value (op=set/create) | |
| variable | No | Advanced create payload (op=create) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only states the operations available but fails to mention side effects, idempotency, permissions, or response behavior. For a tool that modifies state (create/delete/update), this is insufficient.
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 very short (one sentence) but includes redundant phrasing ('Variable intent tool'). It could be more concise while retaining clarity. Not overly verbose, but not optimally structured.
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 5 parameters (with nested objects) and no output schema, the description is too brief. It omits details on return values, error handling, and advanced usage (e.g., the 'variable' object payload). The tool's complexity demands a more complete description.
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%, so the schema already documents all parameters. The description adds no additional meaning beyond listing the operations. Baseline 3 is appropriate; the description does not enhance understanding of 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 the tool manages global variables with operations list/get/set/create/delete, making the purpose specific and actionable. However, it does not differentiate from sibling tools (e.g., fibaro_device, fibaro_scene), though the resource type is distinct enough to avoid confusion.
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 is provided on when to use or not use this tool relative to alternatives. While sibling tools cover different resources, the description offers no contextual cues or exclusions, leaving the agent to infer usage independently.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_by_nameA
Find devices, rooms, or scenes by name (case-insensitive, ignores diacritics). Returns ranked candidates.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| query | Yes | Search query | |
| kinds | No | Optional: Restrict search kinds (devices|rooms|scenes) | |
| limit | No | Max results per kind (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full weight. It discloses case-insensitivity and diacritics handling, which are key behavioral traits. However, it does not mention ranking criteria, pagination, or any side effects, slightly reducing transparency.
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?
One sentence, no wasted words. Information is densed and front-loaded.
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 no output schema, the description should explain return values. 'Returns ranked candidates' is vague; lacks details on candidate structure (e.g., IDs, types). The tool is not complex but missing output context reduces 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?
Schema has 100% coverage with descriptions, but the description adds value by explaining case-insensitivity and ranked results beyond schema. For 'kinds' and 'limit', schema provides basics; description does not add further, but overall meaningful addition.
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 finds devices, rooms, or scenes by name, with specific behavioral details (case-insensitive, ignores diacritics, returns ranked candidates). It distinguishes from sibling tool 'resolve_by_name' by focusing on search rather than exact resolution.
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 when to use (name-based search) but does not explicitly state when not to use or compare with alternatives like 'resolve_by_name' or other search methods. No exclusions or context for choosing among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
first_runA
Setup helper. Use this when configuration is missing. Returns step-by-step instructions plus config templates for common MCP clients.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| client | No | Which MCP client you are using (Claude Desktop / Cursor / VS Code extension / Other) | |
| os | No | Your OS (macOS / Windows / Linux) | |
| repo_path | No | Absolute path to this repo (used to build the node args pointing to dist/index.js) | |
| fibaro_host | No | Fibaro Home Center host (IP or hostname) | |
| fibaro_username | No | Fibaro username | |
| fibaro_https | No | Whether Fibaro uses HTTPS (default: true) | |
| fibaro_port | No | Port (default: 443 for HTTPS, 80 for HTTP) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. It only mentions returns (instructions/templates) but does not state that the tool has no side effects, modifies nothing, or requires no authentication. This is insufficient for a setup 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?
Two sentences, front-loaded with purpose, no redundant information. 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 setup helper with 8 parameters, the description is minimal but sufficient to convey output (instructions+templates). It could mention that no state changes occur, but overall it completes the picture given the simple nature of the 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%, so the schema already explains each parameter. The description adds no extra meaning beyond the overall purpose; for instance, 'format', 'client', 'os' are self-explanatory in schema. Baseline 3 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?
The description clearly states 'Setup helper' and explains it returns step-by-step instructions and config templates. It is specific about the resource (configuration setup) and distinguishes from sibling tools like fibaro_device which are for device interaction.
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 says 'Use this when configuration is missing,' providing clear when-to-use guidance. It does not list alternatives or when not to use, but the sibling set makes it obvious this is for initial setup only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_by_nameB
Resolve a single device by name (or multiple devices if the query is plural). Errors on ambiguity for singular queries.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Output format: text (default) or json (stringified MCP result) | |
| query | Yes | Name query (e.g., "kitchen light") | |
| kind | No | Optional: Restrict kind (device|room|scene). Default: device |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavior. It mentions the plurality and error behavior, but is silent on side effects, idempotency, or any additional behavioral traits. Minimal disclosure for a tool with no annotations.
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, free of fluff. It conveys core behavior efficiently. Could be slightly longer to cover return value, but overall concise and well-structured.
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 lack of output schema and the presence of a 'format' parameter, the description should explain what the tool returns and how the format parameter affects it. This is missing, making the tool less complete for an agent to use 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 each parameter is documented. The description adds context about the query parameter's plurality behavior but does not elaborate further on parameter semantics. Baseline score of 3 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?
The description clearly states it resolves a device by name, with specific behavior for singular vs plural queries. It distinguishes itself from siblings like find_by_name by mentioning ambiguity handling, but does not explicitly contrast with similar 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 description implies usage context by noting that singular queries error on ambiguity, hinting at when to use carefully. However, it lacks explicit guidance on when to prefer this tool over siblings like find_by_name or the Fibaro-specific tools.
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
v3.0.0- First observed
fibaro_device - First observed
fibaro_home - First observed
fibaro_quick_app - First observed
fibaro_scene - First observed
fibaro_variable - First observed
find_by_name - First observed
first_run - First observed
resolve_by_name
TDQS
Most tools target distinct domains (devices, scenes, home, variables, quick apps). However, find_by_name and resolve_by_name overlap significantly in purpose, and fibaro_device also supports name-based retrieval, causing potential confusion.
Five tools follow the 'fibaro_*' prefix convention, but three (find_by_name, first_run, resolve_by_name) break this pattern. Naming is readable but inconsistent, mixing noun phrases with verb phrases.
With 8 tools, the set is well-scoped for a home automation system. Each tool covers a major functional area without being too numerous or sparse.
The tool set covers all major aspects of Fibaro home automation: device control, scenes, home/system info, variables, and quick apps. Minor gaps like advanced scheduling or bulk operations exist but don't hinder core usage.
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 your Tesla from your AI assistant - climate, charging, access, and security.
Interact with the Stitch API using natural language commands.
Deploy, monitor, and manage your OpenClaw AI assistants via natural language.
Create friendly greetings and add two numbers instantly. Speed up simple tasks and streamline ligh…
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables control of Fibaro Home Center 3 smart home devices through natural language commands. Supports device control, scene management, lighting adjustments, and RGB color changes with automatic HC3 connection.13-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Fibaro Home Center 3 smart home systems through natural language commands. Provides comprehensive device control, scene management, QuickApp development, and system monitoring capabilities via the HC3 REST API.3MIT
- FlicenseBqualityNot gradedmaintenanceEnables interaction with Homey smart home devices through natural language, allowing users to control devices, manage zones, and trigger automation flows.64-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Home Assistant smart home devices through natural language. Control devices, manage automations, query entity states, and retrieve historical data across your home automation system.1MIT
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/ikari-software/fibaro-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server