Skip to main content
Glama
Home Assistant MCP Server

Home Assistant MCP Server

Official

Get Todo

ha_get_todo
Read-onlyIdempotent

List Home Assistant todo lists or fetch items from a specific list, with optional status filtering for open or completed tasks.

Instructions

Get todo lists or items - list all todo lists or get items from a specific list.

Without an entity_id: lists every entity in the 'todo' domain (shopping lists and other todo-type integrations) with entity_id, friendly_name and state (number of incomplete items or current status).

With an entity_id: returns that list's items as Home Assistant reports them — uid, summary, status, and description, due and completed where set.

EXAMPLES:

  • List all todo lists: ha_get_todo()

  • Get incomplete items: ha_get_todo("todo.shopping_list", status="needs_action")

Tool call template

This tool declares no required parameters. Add optional parameters from the input schema as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {},
    "name": "ha_get_todo"
  }
}

Input Schema

NameRequiredDescriptionDefault
statusNoOnly items with this status, or with any of a list of statuses: 'needs_action' (open) or 'completed' (done). Only applies when entity_id is provided.
entity_idNoTodo list entity ID (e.g., 'todo.shopping_list').

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv9.1.0
    • changedInput schema / properties / status / anyOf
      Previous value: -[
      -  {
      -    "enum": [
      -      "needs_action",
      -      "completed"
      -    ],
      -    "type": "string"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "type": "string"
      +  },
      +  {
      +    "items": {
      +      "type": "string"
      +    },
      +    "type": "array"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • changedInput schema / properties / status / description
      Previous value: -"Filter items by status: 'needs_action' for incomplete, 'completed' for done. Only applies when entity_id is provided."New value: +"Only items with this status, or with any of a list of statuses: 'needs_action' (open) or 'completed' (done). Only applies when entity_id is provided."
  2. Changed1 schema field changedv8.6.0
    • changedInput schema / properties / entity_id / description
      Previous value: -"Todo list entity ID (e.g., 'todo.shopping_list'). If omitted, lists all todo list entities."New value: +"Todo list entity ID (e.g., 'todo.shopping_list')."
  3. First observedv7.14.2

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive), and the description adds the useful framing that state means "number of incomplete items or current status" in list mode versus per-item fields in item mode, plus the caveat that Home Assistant reports items with due/completed fields only "where set." That partial-population caveat is genuine behavioral context not present in the schema. A dedicated note on sorting or truncation of large lists is the only missing piece.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the two-mode split, then mode details, then compact examples. Nothing is redundant with the schema, and the EXAMPLES block is short and illustrative rather than padding.

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

Completeness5/5

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

For a zero-required-parameter read tool with full schema coverage, annotations, and an output schema, the definition supplies everything needed to choose the right mode and call correctly. Return-value enumeration is arguably surplus given the output schema, but it costs nothing here.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented in structured form, and the description largely restates the same scoping rule (status applies only with entity_id). It adds marginal value by setting expectations about what each mode returns, but no new parameter syntax or format detail. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

Opens with a specific verb and resource ("Get todo lists or items") and immediately splits the tool's two operating modes by presence/absence of entity_id. An agent can tell this apart from the mutating siblings ha_set_todo_item and ha_remove_todo_item from the name and description alone.

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

Usage Guidelines4/5

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

Clearly states the conditional behavior: without entity_id it enumerates the todo domain, with entity_id it returns that list's items, and the status filter "Only applies when entity_id is provided." Worked examples reinforce the calling pattern. It does not explicitly route to alternatives for writing items, but the read-only scope is unambiguous.

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

Deploy Server

Other Tools