← Back to search

io.github.daedalus/mcp-homeassistant

daedalus Scanned 16d ago

MCP server exposing Home Assistant REST API functionality

C
71.7 / 100

Versions

0.1.0latest
first seen May 19, 2026
PermissionsTool SafetyAuthAnnotationsCode QualityStabilitySpecVuln HistoryAuthorTransparencyCommunity

Tools 19

get_api_status
annotations: none low

Check if the Home Assistant API is running. Returns: A dictionary containing the API status message. Example: >>> get_api_status() {"message": "API running."}

get_config
annotations: none low

Get the current Home Assistant configuration. Returns: A dictionary containing the HA configuration including components, location, unit system, and version. Example: >>> get_config() {"components": [...], "version": "2026.4.1", ...}

get_components
annotations: none low

Get list of currently loaded components. Returns: A list of component names loaded in Home Assistant. Example: >>> get_components() ["sensor.cpuspeed", "frontend", "config.core", ...]

get_events
annotations: none low

Get list of event types and their listener counts. Returns: A list of event info objects with event name and listener count. Example: >>> get_events() [{"event": "state_changed", "listener_count": 5}, ...]

get_services
annotations: none low

Get list of available services organized by domain. Returns: A list of service info objects organized by domain. Example: >>> get_services() [{"domain": "browser", "services": ["browse_url"]}, ...]

get_states
annotations: none low

Get all entity states in Home Assistant. Returns: A list of all entity states with their current values and attributes. Example: >>> get_states() [{"entity_id": "sun.sun", "state": "below_horizon", ...}, ...]

get_state
annotations: none low

Get the state of a specific entity. Args: entity_id: The entity ID to retrieve (e.g., 'sensor.kitchen_temperature'). Returns: The state object for the requested entity. Raises: requests.HTTPError: If the entity is not found (404). Example: >>> get_state("sensor.kitchen_temperature") {"entity_id": "sensor.kitchen_temperature", "state": "22.5", ...}

entity_id str
set_state
annotations: none low

Update or create the state of an entity. Note: This sets the representation of a device within Home Assistant and will not communicate with the actual device. To communicate with the device, use the call_service tool. Args: entity_id: The entity ID to set (e.g., 'sensor.kitchen_temperature'). state: The state value (e.g., '25', 'on', 'off'). attributes: Optional dictionary of state attributes. Returns: The updated state object. Example: >>> set_state("sensor.kitchen_temperature", "25", {"unit_of_measurement": "°C"}) {"entity_id": "sensor.kitchen_temperature", "state": "25", ...}

state str entity_id str attributes string
delete_state
annotations: none low

Delete an entity state. Args: entity_id: The entity ID to delete. Returns: A message confirming deletion. Example: >>> delete_state("sensor.kitchen_temperature") {"message": "Entity sensor.kitchen_temperature deleted"}

entity_id str
fire_event
annotations: none low

Fire a custom event in Home Assistant. Args: event_type: The type of event to fire. event_data: Optional dictionary of event data. Returns: A message confirming the event was fired. Example: >>> fire_event("download_file", {"next_rising": "2016-05-31T03:39:14+00:00"}) {"message": "Event download_file fired."}

event_data string event_type str
call_service
annotations: none low

Call a service within a specific domain. Args: domain: The domain to call the service in (e.g., 'light', 'switch'). service: The service to call (e.g., 'turn_on', 'turn_off'). service_data: Optional dictionary of service data. return_response: Whether to include service response data in the result. Returns: A dictionary containing changed states and optionally service response. Example: >>> call_service("light", "turn_on", {"entity_id": "light.ceiling"}) [{"entity_id": "light.ceiling", "state": "on", ...}]

domain str service str service_data string return_response bool
render_template
annotations: none low

Render a Home Assistant template. Args: template: The Jinja2 template string to render. Returns: The rendered template as plain text. Example: >>> render_template("Paulus is at {{ states('device_tracker.paulus') }}!") "Paulus is at work!"

template str
get_history
annotations: none low

Get historical state changes for entities. Args: timestamp: Optional start timestamp (YYYY-MM-DDThh:mm:ssTZD). Defaults to 1 day ago. filter_entity_id: Comma-separated list of entity IDs to filter. end_time: Optional end timestamp for the period. minimal_response: Only return last_changed and state for intermediate states. no_attributes: Skip returning attributes from the database. significant_changes_only: Only return significant state changes. Returns: A list of lists of state objects, one list per entity. Example: >>> get_history(filter_entity_id="sensor.temperature") [[{"entity_id": "sensor.temperature", "state": "22.5", ...}, ...], ...]

end_time string timestamp string no_attributes bool filter_entity_id string minimal_response bool significant_changes_only bool
get_logbook
annotations: none low

Get logbook entries. Args: timestamp: Optional start timestamp. Defaults to 1 day ago. entity: Optional entity ID to filter. end_time: Optional end timestamp. Returns: A list of logbook entry objects. Example: >>> get_logbook() [{"domain": "alarm_control_panel", "message": "changed to disarmed", ...}, ...]

entity string end_time string timestamp string
check_config
annotations: none low

Validate configuration.yaml. Returns: A dictionary with the validation result and any errors. Example: >>> check_config() {"errors": null, "result": "valid"}

handle_intent
annotations: none low

Handle an intent. Args: name: The intent name to handle. data: Optional intent data. Returns: The intent handling result. Example: >>> handle_intent("SetTimer", {"seconds": "30"}) {"speech": {"plain": {"speech": "Timer set for 30 seconds"}}, ...}

data string name str
get_error_log
annotations: none low

Get the error log from the current session. Returns: The error log as plain text. Example: >>> get_error_log() "15-12-20 11:02:50 homeassistant.components.recorder: Found unfinished sessions"

get_calendars
annotations: none low

Get list of calendar entities. Returns: A list of calendar entity information. Example: >>> get_calendars() [{"entity_id": "calendar.holidays", "name": "National Holidays"}, ...]

get_calendar_events
annotations: none low

Get events from a specific calendar. Args: calendar_entity_id: The calendar entity ID (e.g., 'calendar.holidays'). start: Optional start timestamp (ISO8601). end: Optional end timestamp (ISO8601). Returns: A list of calendar events. Example: >>> get_calendar_events("calendar.holidays", "2022-05-01T07:00:00.000Z", "2022-06-12T07:00:00.000Z") [{"summary": "Cinco de Mayo", "start": {"date": "2022-05-05"}, ...}, ...]

end string start string calendar_entity_id str

Permissions 3

network medium
Server uses network capabilities via: requests
filesystem low
Server uses filesystem capabilities via: os
env_vars low
Server uses env_vars capabilities via: os.environ, os.getenv()

Scan Findings 69

low
Tool 'set_state' has no annotations annotation_checker · 100%
low
Tool 'delete_state' has no annotations annotation_checker · 100%
low
Tool 'fire_event' has no annotations annotation_checker · 100%
low
Tool 'get_api_status' has no annotations annotation_checker · 100%
low
Tool 'get_config' has no annotations annotation_checker · 100%
low
Tool 'get_components' has no annotations annotation_checker · 100%
low
Tool 'get_events' has no annotations annotation_checker · 100%
low
Tool 'get_services' has no annotations annotation_checker · 100%
low
Tool 'get_states' has no annotations annotation_checker · 100%
low
Tool 'get_state' has no annotations annotation_checker · 100%
low
Tool 'call_service' has no annotations annotation_checker · 100%
low
Tool 'render_template' has no annotations annotation_checker · 100%
low
Tool 'get_history' has no annotations annotation_checker · 100%
low
Tool 'get_logbook' has no annotations annotation_checker · 100%
low
Tool 'check_config' has no annotations annotation_checker · 100%
low
Tool 'handle_intent' has no annotations annotation_checker · 100%
low
Tool 'get_error_log' has no annotations annotation_checker · 100%
low
Tool 'get_calendars' has no annotations annotation_checker · 100%
low
Tool 'get_calendar_events' has no annotations annotation_checker · 100%
info
Sandbox failed to start for behavioral verification behavioral_verifier · 100%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-5h2m-4q8j-pqpj) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-c2jp-c369-7pvx) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-m8x7-r2rg-vh5g) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-mxxr-jv3v-6pgc) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-rcfx-77hg-w2wv) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-rj5c-58rq-j5g5) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-rww4-4w9c-7733) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (GHSA-vv7q-7jx5-f767) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (PYSEC-2026-1364) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (PYSEC-2026-1365) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (PYSEC-2026-2474) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (PYSEC-2026-2475) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (PYSEC-2026-2476) dependency_analyzer · 95%
medium
Vulnerable dependency: fastmcp@2.0 (PYSEC-2026-338) dependency_analyzer · 95%
medium
Vulnerable dependency: requests@2.31.0 (GHSA-9hjg-9r4m-mvj7) dependency_analyzer · 95%
medium
Vulnerable dependency: requests@2.31.0 (GHSA-9wx4-h78v-vm56) dependency_analyzer · 95%
medium
Vulnerable dependency: requests@2.31.0 (GHSA-gc5v-m9x4-r6x2) dependency_analyzer · 95%
medium
Vulnerable dependency: requests@2.31.0 (PYSEC-2026-1872) dependency_analyzer · 95%
medium
Vulnerable dependency: requests@2.31.0 (PYSEC-2026-1873) dependency_analyzer · 95%
medium
Vulnerable dependency: requests@2.31.0 (PYSEC-2026-2275) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0 (GHSA-mr82-8j83-vxmv) dependency_analyzer · 95%
medium
Vulnerable dependency: pydantic@2.0 (PYSEC-2026-1812) dependency_analyzer · 95%
info
pyproject.toml metadata manifest_parser · 100%
info
Tool: get_api_status manifest_parser · 90%
info
Tool: get_config manifest_parser · 90%
info
Tool: get_components manifest_parser · 90%
info
Tool: get_events manifest_parser · 90%
info
Tool: get_services manifest_parser · 90%
info
Tool: get_states manifest_parser · 90%
info
Tool: get_state manifest_parser · 90%
info
Tool: set_state manifest_parser · 90%
info
Tool: delete_state manifest_parser · 90%
info
Tool: fire_event manifest_parser · 90%
info
Tool: call_service manifest_parser · 90%
info
Tool: render_template manifest_parser · 90%
info
Tool: get_history manifest_parser · 90%
info
Tool: get_logbook manifest_parser · 90%
info
Tool: check_config manifest_parser · 90%
info
Tool: handle_intent manifest_parser · 90%
info
Tool: get_error_log manifest_parser · 90%
info
Tool: get_calendars manifest_parser · 90%
info
Tool: get_calendar_events manifest_parser · 90%
info
Required env vars (2) manifest_parser · 80%
info
Sandbox failed to start for output poisoning scan output_poisoning · 100%
medium
Permission: network access detected permission_analyzer · 90%
low
Permission: filesystem access detected permission_analyzer · 70%
low
Permission: env_vars access detected permission_analyzer · 90%
info
No dependency files found for SBOM generation sbom_generator · 100%
medium
No build provenance detected (SLSA L0) slsa_assessor · 90%