MCP Advanced Tools  

Developer: VTMikel's Plugins     Like this plugin? Show your appreciation!
Category: Hubs and Protocol Bridges
Github: Github Repo
Assistance: Get help!   
Plugin ID: com.vtmikel.mcp_server
Latest release: v2026.11.2 released on Oct. 30, 2026
Release downloaded: 14 times
Requires: Indigo v2026.1.0 or higher
(Check the Releases tab below for older releases that may have different requirements)
  Download latest release

MCP Advanced Tools for Indigo

Indigo 2026.1 has its own MCP server built in, MCP Control. It lets an AI assistant control devices, set variables and run action groups. MCP Advanced Tools is a second MCP server that runs next to it and covers what MCP Control leaves out:

  • Search everything: natural-language search across devices, variables, action groups, triggers and schedules, including objects not published for remote display.
  • See inside automations: the action steps and conditions of any trigger, schedule or action group, and which automations could change a given device or variable.
  • Investigate: "what caused this?" for a device change, and search of the full event-log history.
  • Manage automations: enable or disable (optionally for a set time), duplicate, move, delete, and edit names, descriptions and trigger events.
  • Tags: create, rename, recolor and delete tags, and add or remove them on any object in bulk.
  • Event webhooks: push a notification to your own server when a device or variable condition matches.
  • Plugin-provided tools: tools that other Indigo plugins contribute.

Example questions:

  • "Find all light switches in the bedroom"
  • "What trigger turned off the porch light last night?"
  • "What could change the hallway thermostat?"
  • "Disable the motion trigger for two hours"
  • "Tag every outdoor light and the schedules that run them as outside"

Requirements

  • Indigo 2026.1 or later. (On Indigo 2025.2, use MCP Server 2026.10.1.)
  • Apple Silicon Mac.
  • OpenAI API key for semantic search (get one). See Privacy & Security for what is sent.
  • Node.js only for Claude Desktop, which connects through npx mcp-remote: brew install node.

Installation

  1. Install the MCP Advanced Tools plugin in Indigo.
  2. Enter your OpenAI API key in the plugin's preferences.
  3. Create one MCP Advanced Tools device. This starts the server.
  4. Wait a minute or two while the plugin indexes your database.
  5. Connect your AI client (below).

The Model preference (default gpt-6-luna) is the OpenAI model used to expand search queries. Embeddings always use text-embedding-3-large.

Connecting a client

Connect your AI client to both servers. Both run on the Indigo Web Server and accept the same key.

Server Endpoint path Use it for
Indigo MCP Control /v3/api/mcp controlling devices, variables, running action groups/triggers/schedules, listing objects, plugins
MCP Advanced Tools /message/com.vtmikel.mcp_server/mcp/ everything listed above

Key. Send an Indigo API key or a local secret as Authorization: Bearer <key>. Create API keys under Authorizations in your Indigo Account; local secrets go in Preferences/secrets.json in your Indigo install folder (see Indigo's connection guide).

Base URL. Put the endpoint path after one of these (default port 8176):

  • Same Mac: http://localhost:8176
  • Your LAN: http://<indigo-ip>:8176
  • Remote: https://<your-reflector>.indigodomo.net

VS Code, Cursor, Claude Code (direct HTTP: .vscode/mcp.json, Cursor's MCP settings, ~/.claude.json or a project .mcp.json):

{
  "mcpServers": {
    "indigo": {
      "type": "http",
      "url": "http://localhost:8176/v3/api/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    },
    "indigo-advanced-tools": {
      "type": "http",
      "url": "http://localhost:8176/message/com.vtmikel.mcp_server/mcp/",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Claude Desktop has no direct HTTP support, so it goes through mcp-remote (~/Library/Application Support/Claude/claude_desktop_config.json). Add one entry per server:

{
  "mcpServers": {
    "indigo-advanced-tools": {
      "command": "npx",
      "args": [
        "-y", "mcp-remote",
        "https://your-reflector.indigodomo.net/message/com.vtmikel.mcp_server/mcp/",
        "--header", "Authorization:Bearer YOUR_API_KEY"
      ]
    }
  }
}

For plain HTTP on the LAN, add "--allow-http" to args. For a self-signed HTTPS certificate, add "env": { "NODE_TLS_REJECT_UNAUTHORIZED": "0" } to the entry.

Transport. The endpoint speaks MCP streamable HTTP: POST only (GET returns 405), no server push. It serves protocol 2026-07-28 statelessly and the older session-based 2025-11-25 / 2025-06-18 (sessions expire after 2 hours idle).

How the two servers split the work

You want to… MCP Control MCP Advanced Tools
Control devices, set or create variables ✓ —
Run an action group, trigger or schedule ✓ (with confirmation) —
List and look up objects ✓ published objects triggers and schedules
Find things by meaning ("entryway light" → Foyer Light) ✓ published objects ✓ every object
See an automation's steps and conditions ✗ ✓
"What could change this device?" / "What caused this?" ✗ ✓
Search the event log recent lines ✓ full history
Enable/disable, duplicate, move, delete, rename automations ✗ ✓
Read tags ✓ ✓
Create, edit, delete and apply tags ✗ ✓
Webhooks to your own server ✗ ✓
Tools from other plugins ✗ ✓
  • MCP Control only sees objects published for remote display. This plugin sees every object, so it can find a device that MCP Control can't control until you publish it.
  • list_triggers, list_schedules and query_event_log exist on both servers. This plugin's versions add trigger summaries, next run times and full log history.
  • Action steps, conditions and schedule timing can't be edited over MCP; change them in Indigo. To make a variant of an automation, duplicate it and edit the copy.

Tools

Seventeen tools, three more when webhooks are on, plus any plugin-provided tools. List tools page with limit (default 50, max 500) and offset.

  • search_entities: natural-language search across every device, variable, action group, trigger and schedule. An exact name match comes first; otherwise results rank by name and meaning. Filter by device_types, state_filter and tags (tag_match: all or any). Returns 10 results unless you set limit.

Automations

  • list_triggers / list_schedules: one-line summaries (schedules include the next run time); filter by name, type, enabled, folder or tags.
  • get_trigger_details / get_schedule_details / get_action_group_details: the full automation — event or timing, condition tree or condition script, and every action step, with IDs resolved to names.
  • find_automation_references: which automations watch, act on, set or check a device, variable or action group, including through nested action groups and embedded Python.
  • control_trigger / control_schedule / control_action_group: enable / disable (with duration_seconds to revert automatically, or delay_seconds to start later), duplicate, move_to_folder, remove_delayed_actions, delete. Action groups support duplicate, move and delete.
  • update_trigger: edit name, description and the trigger's event (device/variable, comparison, value).
  • update_schedule / update_action_group: edit name and description.

To run an automation, use MCP Control's execute_trigger, execute_schedule or execute_action_group.

Investigation

  • investigate_event: finds a device's state change in the log and ranks the automations that likely caused it.
  • query_event_log: the event log, newest first. Without filters it reads the live log; with query, regex, types, start_time or end_time it searches the full history.

Tags

  • manage_tags: create (name and hex color), update (rename or recolor), delete. Names are lowercase words joined by dashes (holiday-lighting).
  • tag_objects: add or remove one tag on up to 200 objects of any type (device, variable, trigger, schedule, action_group, control_page). Each object reports its outcome; dry_run=true previews.

Event subscriptions (when webhooks are on)

  • create_event_subscription, list_event_subscriptions, delete_event_subscription. See Event webhooks.

Safety settings

Setting Default Effect
Allow AI to delete automations off Required, with confirm=true, to delete a trigger, schedule or action group
Allow AI to delete tags off Required, with confirm=true, to delete a tag
Confirmation tag ask-first Automations carrying this tag need confirm=true for any change. Empty turns it off
Allow plugin-provided tools to make changes on Off makes plugin-provided write tools refuse

Removing a tag from more than 25 objects, or removing or renaming the confirmation tag, also needs confirm=true.

Plugin-provided tools

Other Indigo plugins can add tools to this server. The plugin finds them automatically and lists them under the provider's prefix, for example autolights_update_zone from Auto Lights.

  • Which plugins: the preference Plugins that may provide MCP tools is All plugins (default), Only the plugins selected below, or All plugins except those selected below. An excluded plugin's tools are not listed or called.
  • Refresh: new tools appear within a minute. Plugins → MCP Advanced Tools → Rescan Plugin-Provided MCP Tools forces it. A connected client may need a new session to see them.

Add MCP tools to your plugin

Full rules: docs/mcp-provider-manifest.md.

  1. Ship Contents/Resources/mcp-manifest.json:

    json { "manifest_version": 1, "provider": {"plugin_id": "com.example.myplugin", "display_name": "My Plugin"}, "tools": [ { "name": "get_status", "description": "Return the plugin's current status.", "write": false, "inputSchema": {"type": "object", "properties": {}, "required": []} } ] }

  2. Declare a hidden action in Actions.xml and handle it in plugin.py:

    xml <Action id="mcp_tool_invoke" uiPath="hidden"> <Name>MCP Tool Invocation Endpoint</Name> <CallbackMethod>handle_mcp_tool_invoke</CallbackMethod> </Action>

    python def handle_mcp_tool_invoke(self, action, dev=None, caller_waiting_for_result=True): import json tool = action.props.get("tool", "") args = json.loads(action.props.get("arguments", "{}")) if tool == "get_status": return json.dumps({"status": "ok", "result": {"state": "running"}}) return json.dumps({"status": "error", "error": {"type": "not_found", "message": f"unknown tool {tool}"}})

  3. Optionally, announce your tools from startup() so they register immediately:

    python try: indigo.server.broadcastToSubscribers("mcp_tools_updated") except Exception: pass

Your plugin works the same without MCP Advanced Tools installed.

Event webhooks

An event subscription sends an HTTP POST to your own server when a device or variable condition matches — "the next time the front door opens", "if the garage stays open for 10 minutes".

The plugin only sends. It does not work with stock Claude Desktop or other clients that can't receive a webhook; it is meant for agents and automation systems with their own HTTP endpoint.

Turn it on in Plugins → MCP Advanced Tools → Configure → Enable Event Webhooks.

Creating a subscription

Parameter Required Description
webhook_url yes Your endpoint
entity_type yes "device" or "variable"
conditions yes State conditions, combined with AND
entity_id no One device/variable; omit to watch all of that type
auth no { "mode": "none"\|"bearer"\|"hmac", "token": "…", "verify_ssl": true }
duration_seconds no Condition must hold this long before firing
max_fires no Delete after this many deliveries (1 = one-shot)
description no Label

A subscription fires when the state changes into a match, not repeatedly while it stays matched.

create_event_subscription(
    webhook_url="https://my-server.example.com/indigo-hook",
    entity_type="device", entity_id=67890,
    conditions={"onState": True}, duration_seconds=600,
    description="Garage left open",
)

Conditions

Match any state key, including plugin states, by value or with an operator:

{ "onState": true }
{ "temperatureInput1": { "gt": 80 }, "onState": true }

Operators: eq, ne, gt, gte, lt, lte, contains, regex. Variables match on value; booleans and numbers are compared as such. { "any_change": true } fires on every variable change (not combinable with duration_seconds).

Authentication

  • bearer: sends Authorization: Bearer <token>.
  • hmac: sends X-Webhook-Signature: sha256=<HMAC-SHA256(token, body)> and X-Webhook-Timestamp.

    python import hmac, hashlib expected = "sha256=" + hmac.new(SECRET.encode(), raw_body, hashlib.sha256).hexdigest() ok = hmac.compare_digest(expected, request.headers["X-Webhook-Signature"])

Set "verify_ssl": false only for a self-signed receiver.

Payload

A JSON POST with headers X-Event-Id, X-Event-Type and X-Subscription-Id:

{
  "event_id": "01ARZ3NDEKTSV4RRFFQ69G5FAV",
  "schema_version": "1.0",
  "dedupe_key": "indigo:device:12345:state:onState:True",
  "source": { "system": "indigo", "plugin": "com.vtmikel.mcp_server", "host": "my-indigo-mac" },
  "timestamp": "2026-06-01T15:30:45.123456+00:00",
  "event_type": "device.state_changed",
  "entity": { "kind": "device", "id": 12345, "name": "Front Door", "device_type": "…" },
  "state": { "changed_keys": ["onState"], "old": { "onState": false }, "new": { "onState": true } },
  "trigger": { "subscription_id": "…", "conditions_matched": { "onState": true } },
  "human": { "title": "Front Door state changed", "summary": "Front Door: onState=true" }
}

Variable events use event_type: "variable.value_changed" and entity.kind: "variable".

Delivery

  • At least once: deduplicate by event_id. Respond with any 2xx.
  • Retries: up to 4 attempts with backoff on 5xx and network errors; a 4xx is not retried.
  • Persistence: subscriptions survive restarts. They are stored, with their auth tokens, in …/Preferences/Plugins/com.vtmikel.mcp_server/subscriptions.json (mode 0600). A pending duration_seconds wait does not survive a restart.

Managing subscriptions in a browser

When webhooks are on, http://<indigo-host>:8176/message/com.vtmikel.mcp_server/events_ui/ lists active subscriptions and lets you remove them. It uses normal Indigo Web Server login. Plugins → MCP Advanced Tools → Print Event Subscriptions Web UI URL logs the URLs.

Event Subscriptions web UI

Tips

  • Include the location and device type in a question.
  • Device Notes are part of the search index, so good notes improve results.

Privacy & Security

Sent to OpenAI to build the search index (stored on your Indigo Mac): names, descriptions, models and types of devices, variables, action groups, triggers and schedules, plus your search queries. Never sent: device states or values, addresses, credentials, URLs, network configuration or history.

Every MCP request needs a key. Use the Indigo Reflector for encrypted remote access.

Support

Release details
Released on: Oct. 30, 2026
Requires: Indigo v2026.1.0+
Downloaded: 14 times 
Changes in this release

Stable release for Indigo 2026.1.0, now that Indigo 2026.1 is out of beta. Same code as the 2026.11.1 beta. MCP Server is now MCP Advanced Tools, the companion to Indigo MCP Control (the MCP server built into Indigo 2026.1).

What's in it, compared with MCP Server 2026.10.1:

  • New name: existing installs upgrade in place, keeping the same plugin id, endpoint, device, settings and plugin-provided tools.
  • Works with Indigo MCP Control: device control, variables, running action groups, triggers and schedules, and plain listings and lookups moved to MCP Control. A call to a removed tool name gets an error naming its replacement. Connect both servers to your AI client; the README shows how.
  • Tags: manage_tags creates, renames and recolors tags (deleting needs the Allow AI to delete tags preference and confirm=true); tag_objects puts a tag on, or takes it off, up to 200 objects per call, with a dry run.
  • Tag-aware search and lists: search_entities, list_triggers and list_schedules take a tags filter (all or any), and every result carries the object's tags. The search index rebuilds once after the upgrade.
  • Confirmation tag: triggers, schedules and action groups carrying a tag you choose (default ask-first) need confirm=true before an AI can enable, disable, edit, move, duplicate or delete them.
  • History moved to the Grafana Home Dashboard plugin's influxlog_query_history tool (Grafana Home Dashboard 2026.12.1). The InfluxDB settings are gone from this plugin.
  • Kept: search across every object, trigger, schedule and action-group details and editing, enable/disable with timed revert, automation references and event investigation, historical event-log search, event webhooks, and tools provided by other plugins.
  • Fix: get_*_details now names the folder of triggers, schedules and action groups.
  • Requires Indigo 2026.1. On Indigo 2025.2, stay on MCP Server 2026.10.1.
Release details
Released on: Oct. 14, 2026
Requires: Indigo v2025.2.0+
Downloaded: 30 times 
Changes in this release

MCP Server 2026.10.1

Search (search_entities)

  • An exact name is always the first result: devices, variables, action groups, triggers and schedules. Case, spacing, punctuation and snake_case/camelCase don't matter, so "alarm enabled" finds the variable alarm_enabled.
  • Results rank by both name and meaning. Every item is indexed twice, once by its name and once by a description of what it is. Your own words are searched alongside an AI-expanded query, so other words for the same thing still match ("entryway light" finds a device named Foyer Light).
  • device_types filters before ranking, so limit returns that many devices of the type, and limit/offset page through the full result set with a correct has_more. The default is still 10 results. Above 20 results, devices come back with minimal fields.
  • Cleaner index. Device addresses, protocols and model numbers are no longer part of the searchable text, and generated keywords stay with each device's own kind and room. This also means addresses are no longer sent to OpenAI.
  • Index upkeep. Index rows are no longer duplicated, and the index is compacted periodically. Older installs could grow it to hundreds of MB.

Plugin-provided tools

  • New setting, "Plugins that may provide MCP tools": All plugins (the default, same as before), Only the plugins selected below, or All plugins except those selected below. The setting takes effect immediately. If a client calls a tool from a plugin that was just blocked, the error explains why.
  • Tool-providing plugins now register live when first installed, or when an upgrade adds tools. No restart or rescan is needed.

Models

  • Search embeddings use text-embedding-3-large.
  • The Model setting (default gpt-6-luna) is now actually used; earlier versions ignored it. A saved gpt-5-mini moves to gpt-6-luna. These calls use the lowest reasoning effort the model allows, which keeps searches fast.
  • The unused Large Model setting is removed.

Upgrade notes

  • The first start after upgrading rebuilds the search index once. That takes about a minute and a half for a few thousand Indigo items, and AI search answers once it finishes.
  • Your OpenAI API key needs access to text-embedding-3-large and the model chosen in the plugin config.
Release details
Released on: Oct. 14, 2026
Requires: Indigo v2025.2.0+
Downloaded: 28 times 
Changes in this release

Fixed

  • Delayed executes failed. action_execute_group with a delay, and control_trigger / control_schedule / control_action_group with delay_seconds on the execute command, passed a delay argument that Indigo's execute() does not accept, so every delayed run failed with a Boost.Python "did not match C++ signature" error. The delay is now emulated inside the plugin: the reply carries job_id and scheduled_in_seconds, and the item runs once the delay has passed. Because Indigo has no delayed execute for triggers, schedules or action groups, a pending delayed run does not appear in Indigo's UI or event log, cannot be cancelled with remove_delayed_actions, and is lost if the plugin restarts. Immediate executes are unchanged.

Dependencies

  • pandas 3 (pandas>=3.0.6,<4, was >=2.3.3,<3). pandas is used only indirectly, by the semantic-search index (LanceDB). Indigo reinstalls the plugin's packages on the first start after the update; this takes a few seconds.

Requirements

Unchanged: Indigo 2025.2 or later on Apple Silicon, and an OpenAI API key for semantic search.

Release details
Released on: Aug. 29, 2026
Requires: Indigo v2025.2.0+
Downloaded: 65 times 
Changes in this release

Scripted conditions are now visible

Triggers and schedules that use a scripted condition (the "If Python script returns True" option on the Condition tab) were previously invisible to the server: the details tools reported conditions: {type: "none"}, and find_automation_references never saw entities referenced only inside a condition script — so a variable used only there looked unused and safe to delete. Both are fixed (forum request: Expose scripted conditions).

  • get_trigger_details / get_schedule_details now render a scripted condition as conditions: {type: "scripted"} with the same fields as embedded action scripts: language, script_length, and either the full script_source (truncated over 4000 chars) or just script_first_line when include_scripts is false.
  • find_automation_references now text-scans embedded Python for references. Condition scripts report under the existing condition_reads role; embedded action-step scripts (which were also unscanned before) report under a new script_reference role. Matches are found by known entity id (e.g. indigo.variables[123456789]) and by exact quoted entity name (e.g. indigo.devices["Living Room Sonos"]), and every script match is tagged confidence: "heuristic" with the matched token in detail.
  • The new heuristic references deliberately carry no weight in investigate_event cause ranking — a script that merely logs an entity's name won't be blamed for a state change.

Other changes

  • Condition containers of an unrecognized type now degrade to conditions: {type: "unknown", raw: ...} instead of being misreported as none.
Release details
Released on: Aug. 24, 2026
Requires: Indigo v2025.2.0+
Downloaded: 74 times 
Changes in this release

Plugin-Provided Tools

Other Indigo plugins can now contribute their own MCP tools to this server. A provider plugin ships a small JSON manifest in its bundle; this server discovers it automatically, lists the tools to AI clients under the provider's prefix, and forwards calls to the provider over Indigo's native plugin messaging. No configuration is needed on this server, and no MCP protocol knowledge is needed by the provider.

First provider: Auto Lights v2026.8.0, which contributes 15 autolights_* config-authoring tools — AI assistants can now read and edit Auto Lights zones, lighting periods, and settings through validated tools instead of touching its JSON config file.

How it works:

  • Discovery — on startup the server scans every installed plugin bundle for Contents/Resources/mcp-manifest.json. Providers also announce themselves with an mcp_tools_updated broadcast, so their tools register the moment the provider starts or updates, with no MCP Server restart. A Plugins → MCP Server → Rescan Plugin-Provided MCP Tools menu item forces a re-discovery.
  • Naming — every contributed tool is exposed as {prefix}_{name} (e.g. autolights_update_zone). The prefix is enforced by this server (derived from the provider's plugin ID by default) with first-come uniqueness across providers, so tools are always attributable and can never collide with built-ins or each other.
  • Write gate — a new config checkbox, "Allow plugin-provided tools to make changes" (default on), controls whether provider write tools work; read tools always do. Takes effect immediately, and honors the headless automation_gates.json override.
  • Safety — providers are called only when running; calls carry a per-tool timeout; provider errors come back as structured results the AI can self-correct against, never as opaque failures.

With no provider plugins installed, the server behaves exactly as before — the tool set is unchanged and nothing new runs.

For plugin developers: adding tools to your own plugin takes a manifest file, one hidden action, and one broadcast line — see the quick-start in the README and the full provider contract in docs/mcp-provider-manifest.md. Your plugin remains fully functional for users who don't have the MCP Server installed.

Other changes

  • ServerApiVersion raised from 3.6 to 3.8 (Indigo 2025.2).
  • Note for connected clients: tools/list responses carry a 1-hour cache hint, so an already-connected MCP client may not see newly installed provider tools until it starts a fresh session.
Release details
Released on: Aug. 8, 2026
Requires: Indigo v2024.2.0+
Downloaded: 74 times 
Changes in this release

First stable release of the 2026.8.0 line, promoting v2026.8.0-beta.1 out of beta.

MCP protocol revision 2026-07-28

The server now speaks the stateless "modern era" revision alongside the session-based ones, both concurrently on the same endpoint.

Revision Style
2026-07-28 Stateless — no initialize handshake, no session header. Each request carries MCP-Protocol-Version, Mcp-Method (plus Mcp-Name for tools/call, resources/read, prompts/get) and params._meta.
2025-11-25, 2025-06-18 Session-based. Deprecated — support will be removed once clients have migrated.

analyze_historical_data — answers short-window questions

The tool could not express "the past 4 hours": time_range_days was validated to 1–365, so the shortest window was a full day, and the output was a per-change duration narrative built for on/off devices with no aggregation anywhere.

  • time_range_hours (1–8760), taking precedence over time_range_days. Use it for any "last N hours" question.
  • Numeric summary leading each device section — current / range / mean / trend — with the unit read from the device's own sensorValue.ui state, since Indigo files every sensor reading under the generic sensorValue. On/off and enum devices keep the duration narrative unchanged.
  • Stale-sensor warning when a value never moves during the window, probing further back to name the last real change and how long ago it was. A sensor that has stopped reporting otherwise looks identical to a steady one, because the InfluxDB writer keeps recording the last known value on its heartbeat.
  • Bounded output. The change list caps at 50 lines with an explicit truncation notice; totals and statistics still cover every sample. A single temperature sensor at the default 30-day range went from ~700 lines (~90 KB) to under 7 KB.

search_entities — live device state

Results came from the vector store, which only rewrites a record when an entity's static fields change — so state values froze at whenever the record was last written and could be a year out of date. Each hit is now re-read from the live data provider, preserving search relevance and falling back to the stored record for entities the provider no longer knows. This happens before state filtering, so state_filter matches current values too.

Other

  • Property selection for historical analysis now uses the plugin's configured model instead of a hardcoded gpt-4, and no longer offers the model field names the device doesn't have — each miss previously cost two wasted InfluxDB round-trips.
  • CI targets Python 3.13, matching the interpreter Indigo bundles; Renovate no longer proposes Python versions Indigo doesn't ship.
Release details
Released on: July 18, 2026
Requires: Indigo v2024.2.0+
Downloaded: 97 times 
Changes in this release

InfluxDB 3 support

The analyze_historical_data tool now works with InfluxDB 3 (Core/Enterprise) via its v1-compatibility API, while InfluxDB 1.8 remains fully supported — same configuration, same code path, no new dependencies.

To use InfluxDB 3: enter an https:// (or http://) URL, your v3 database token as the password (username can be anything), and the database name. That's it — no version selector needed.

Fixes

  • TLS support — an https:// InfluxDB URL now actually enables TLS. Previously the scheme was stripped and the client sent plaintext HTTP to the TLS port, failing with errors like 404 page not found. (#49)
  • Health check works with scoped tokens — the connection test no longer runs SHOW DATABASES (admin-only on InfluxDB 3) or the 1.x ping() (incompatible with v3's /ping response). It now uses a database-scoped SHOW MEASUREMENTS LIMIT 1, which also validates auth and database access on both versions. (#49, #50)
  • Response parsing on InfluxDB 3 — queries now request JSON explicitly; the client's default msgpack format is serialized differently by InfluxDB 3 and broke result parsing ('list' object has no attribute 'get'). (#51)

Notes

  • Config UI and README updated with InfluxDB 3 setup guidance.
  • New unit tests cover the TLS derivation, health check, and Accept-header behavior.
Release details
Released on: July 3, 2026
Requires: Indigo v2024.2.0+
Downloaded: 91 times 
Changes in this release

v2026.6.0 — Automation Introspection, Investigation & Control

Major release: triggers, schedules, and action groups are now first-class citizens of the MCP server. Eight new tools close the gap Indigo's scripting API leaves around understanding and managing automations.

Understand your automations

  • list_triggers / list_schedules — every trigger/schedule with a one-line summary; schedules include next execution times
  • get_trigger_details / get_schedule_details / get_action_group_details — full explanation of one automation: the event or timing that fires it, its condition tree, and every action step (device commands, variable writes, nested action groups, embedded Python scripts, plugin actions with configuration). Sourced by merging the live Indigo Object Model with a read-only parse of the server's database file — the only place action steps and conditions exist.
  • find_automation_references — reverse lookup: what watches, acts on, sets, or condition-reads a device/variable/action group, including indirect paths through nested action-group chains, cross-checked against Indigo's own dependency graph
  • search_entities now also finds triggers and schedules semantically

Investigate behavior

  • query_event_log (existing tool, now much more capable) — with no filters it returns the recent tail from Indigo's live event log; add query/regex/types/start_time/end_time and it scans the full historical daily log files instead. One tool, filters optional, consistent {timestamp, type, message} output.
  • investigate_event — "what caused this device change?": locates the change in the log and ranks the automations that fired around it by structural evidence plus temporal proximity, with the evidence spelled out

Control

  • control_trigger / control_schedule / control_action_group — lifecycle: enable/disable (with duration_seconds auto-revert: "disable this trigger for 2 hours"), execute, duplicate, move to folder, remove delayed actions, delete. Deletion requires confirm=true and the Allow AI to delete automations preference (off by default); every other action is always available.
  • update_trigger — edit a trigger's name/description and event settings (watched device/variable, comparison, value), with a before/after diff. update_schedule / update_action_group edit name/description only. Schedule timing, action steps, and conditions are read-only in Indigo's scripting API — duplicate-and-modify is the supported way to make a trigger variant.

Notes

  • Automation tools are per entity type (e.g. control_trigger, get_schedule_details) rather than one tool with an entity_type parameter — clearer, self-documenting names.
  • Only deletion is permission-gated (the Allow AI to delete automations preference, off by default, plus confirm=true). Reading, control, and editing are always available.
  • Field editing was verified on a live server: replaceOnServer() preserves action steps and conditions exactly.
  • Plugin tools now report the real PluginVersion instead of CFBundleVersion.
  • 44 tools total (47 with event webhooks enabled); the vector store now indexes triggers and schedules.
  • query_event_log covers both the recent live tail and filtered historical search behind one interface.
Release details
Released on: June 2, 2026
Requires: Indigo v2024.2.0+
Downloaded: 121 times 
Changes in this release

Event subscriptions get a management web UI, smarter variable matching, an "any change" trigger, and — most importantly — persistence across restarts.

New

  • Event Subscriptions web UI — list every active subscription with full detail (auth tokens are never shown) and remove individual ones from a browser. Served by the Indigo Web Server at /message/com.vtmikel.mcp_server/events_ui/ (behind the same auth as the rest of IWS). A new plugin menu item, Print Event Subscriptions Web UI URL, prints the link.
  • Persistence — subscriptions are now saved to disk and restored on startup, so they survive plugin restarts, Indigo restarts, and upgrades. (Previously they were in-memory only and lost on every restart.)
  • "Any change" subscriptions (variables) — conditions={"any_change": true} fires the webhook on every change to a variable's value. Variable-only.

Fixed

  • Variable condition matching — Indigo stores variable values as strings, so {"value": true} never matched (bool ≠ string) and numeric operators like {"value": {"gt": 50}} silently failed. Conditions now coerce booleans and numbers, so these work as expected. The fix is in the shared filter, so it also hardens list_devices / search / get_devices_by_state.

Notes

  • The persisted subscriptions file (…/Preferences/Plugins/com.vtmikel.mcp_server/subscriptions.json) contains your webhook auth tokens — required so authenticated webhooks can re-authenticate after a restart. It is written 0600 inside Indigo's protected app-support directory. Pending dwell timers are not persisted (they re-arm on the next matching transition).
  • Requires Indigo 2025.2+ (Python 3.13), Apple Silicon.

Install

Download MCP Server.indigoPlugin.zip below, unzip, and double-click the .indigoPlugin to install (or update in place).

Release details
Released on: May 1, 2026
Requires: Indigo v2024.2.0+
Downloaded: 147 times 
Changes in this release

Dependency bump to fix Indigo 2025.2 (Python 3.13) startup crash.

Impact: - Now requires Indigo 2025.2 or later (Python 3.13) - Apple Silicon only — Intel Mac (x86) is no longer supported (lancedb 0.27+ dropped x86 wheels)

What changed: - lancedb: 0.25.x → 0.30.2 - pyarrow: 23.0.x → 23.0.x (range widened)

Release details
Released on: March 21, 2026
Requires: Indigo v2024.2.0+
Downloaded: 137 times 
Changes in this release

Bug Fixes

  • Fix LLM keyword cache returning failures instead of cached results — Cache hits during vector store sync were being discarded and misinterpreted as failures, causing misleading "Even small batch of size 1 failed" warnings. Cached keywords are now correctly returned.
  • Support multiple MCP protocol versions (2025-11-25 and 2025-06-18) — Fixes compatibility with MetaMCP and other clients that connect using the older protocol version.
  • Accept wildcard */* Accept header — Fixes internal server error when MCP clients send Accept: */* instead of application/json.
  • Add missing headers to error responses — 406 and 500 error responses were missing the headers key, causing Indigo Web Server to return generic errors instead of proper error details.

Improvements

  • Update default OpenAI models from GPT-5/GPT-5-mini to GPT-5.4/GPT-5.4-mini
  • Add VS Code, Cursor, and Claude Code CLI direct HTTP transport configuration docs

Dependencies

  • Update LangSmith to >=0.7.3,<0.8.0
  • Update PyArrow to v23
Release details
Released on: Jan. 17, 2026
Requires: Indigo v2024.2.0+
Downloaded: 136 times 
Changes in this release

What's Changed

Dependency Cleanup

  • Removed 8 unused packages:
    • langgraph, langgraph-checkpoint, langgraph-prebuilt, langgraph-sdk (never imported)
    • influxdb-client (code uses legacy 1.x influxdb only)
    • pydantic-settings, python-dotenv, dicttoxml

Version Updates

  • openai >=2.15.0 (was >=2.3.0)
  • tiktoken >=0.12.0 (was >=0.11.0)
  • pydantic >=2.12.5 (was >=2.12.2)
  • jinja2 >=3.1.5 (was >=3.1.0)

Stability Constraints Added

  • lancedb <0.27.0 (0.26+ deprecates Intel Mac support)
  • langsmith <0.6.0 (0.6+ requires Python 3.10+)
  • matplotlib <4.0.0

Full Changelog: https://github.com/mlamoure/indigo-mcp-server/compare/v2025.1.5...v2025.1.6

Release details
Released on: Dec. 22, 2025
Requires: Indigo v2024.2.0+
Downloaded: 129 times 
Changes in this release

Bug Fix

Fixes internal server error when MCP clients send Accept: */* header.

Changes

  • Accept */* (wildcard) as valid Accept header in addition to application/json and text/event-stream
  • Add missing "headers" key to 406 response in mcp_handler.py
  • Add missing "headers" key to 500 error response in plugin.py

Root Cause

The missing "headers" key in error responses caused Indigo Web Server to return a generic "internal server error" instead of the proper error response. Clients like mcp-remote send Accept: */* which was incorrectly rejected.

Related to #5 (investigation ongoing)

Release details
Released on: Nov. 6, 2025
Requires: Indigo v2024.2.0+
Downloaded: 121 times 
Changes in this release

Enhancements and Bug Fixes

Fixed

  • Configuration Save Error: Fixed AttributeError when saving plugin configuration (#4)
    • Removed obsolete server restart calls from when MCP ran as separate process
    • MCP server now runs via Indigo Web Server and doesn't require restart on config changes
    • Configuration changes take effect on next MCP request

Technical Details

  • Removed non-existent _restart_mcp_server_from_device() method calls
  • Updated success messages to clarify config behavior
  • Environment variables are updated immediately without server restart

Fixes https://github.com/mlamoure/indigo-mcp-server/issues/4