ipsymcon-mcp-server

ipsymcon-mcp-server

Enables Claude/agents to read, control, and develop IP-Symcon home automation systems via JSON-RPC, including object tree navigation, variable reading, device switching, and PHP script management.

Category
访问服务器

README

ipsymcon-mcp-server

CI

MCP-Server für IP-Symcon — lässt Claude/Agenten eine IP-Symcon-Hausautomation nicht nur abfragen und steuern, sondern entwickeln: Objektbaum lesen, PHP-Skripte lesen/ändern/anlegen, Variablen lesen, Geräte schalten. Über die IP-Symcon JSON-RPC-API.

Stack: Python + FastMCP. Companion-Modul für IP-Symcon-seitiges Log-Lesen: SymconMCPBridge (MIT).


Sicherheitsmodell (wichtig)

  • Lese-Tools sind immer verfügbar.
  • Schreib-/Dev-Tools (ips_set_value, ips_request_action, ips_run_script, ips_set_script_content, ips_create_script, ips_call) brauchen die Umgebungsvariable IPS_ENABLE_WRITE=true. Default ist aus — der bewusste Riegel, damit ein Agent nicht unbemerkt in die laufende Hausautomation schreibt.
  • Empfehlung: Schreibzugriff zuerst gegen eine Test-/Staging-Instanz, vorher Backup. (Dry-Run + automatisches Snapshot-Backup vor Änderungen sind als nächster Ausbauschritt geplant.)

Voraussetzungen in IP-Symcon

  1. JSON-RPC-Zugang ist standardmäßig aktiv unter http://<host>:3777/api/.
  2. Einen Benutzer mit Zugriff anlegen (Systemsteuerung → Benutzerverwaltung) → in IPS_USER/IPS_PASSWORD eintragen. Hat die Installation keine Authentifizierung, bleiben beide leer.

Installation

cd ~/workspace/ipsymcon-mcp-server
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
cp .env.example .env   # dann .env mit echten Werten füllen

Konfiguration (.env)

Variable Bedeutung
IPS_URL JSON-RPC-Endpunkt, z. B. http://192.168.1.10:3777/api/ (das /api/ wird sonst ergänzt)
IPS_USER / IPS_PASSWORD Basic-Auth-Zugangsdaten (leer, falls keine Auth)
IPS_ENABLE_WRITE false (Default) = nur lesen · true = Schreib-/Dev-Tools aktiv
IPS_INSTANCES_FILE optional: Pfad zu einer YAML mit mehreren benannten Instanzen (s. u.)

Mehrere Instanzen (Multi-Instance)

Für mehrere IP-Symcon-Ziele (z. B. home + ein Migrations-Ziel linux): eine YAML-Datei anlegen (Vorlage: instances.example.yaml) und IPS_INSTANCES_FILE darauf zeigen lassen.

default: home
instances:
  home:
    url: http://192.168.1.10:3777/api/
    user: ""
    password: ""
  linux:
    url: http://192.168.1.20:3777/api/

Jedes Tool nimmt dann einen optionalen instance-Parameter (home/linux); ohne Angabe → default. Abwärtskompatibel: ohne IPS_INSTANCES_FILE gilt das einzelne IPS_URL als implizite Default-Instanz — bestehende Setups laufen unverändert. Die echte YAML enthält Credentials → wie .env aus git heraushalten (instances.yaml ist gitignored).

Start / Test

# direkt starten (stdio)
.venv/bin/python -m ipsymcon_mcp

# mit MCP Inspector testen
.venv/bin/python -m mcp dev ipsymcon_mcp/server.py

Registrierung in Claude Code

claude mcp add ipsymcon -s user -- /Users/<user>/workspace/ipsymcon-mcp-server/.venv/bin/python -m ipsymcon_mcp

(Umgebungsvariablen aus .env werden geladen; alternativ per -e IPS_URL=... etc. übergeben.)


Tools (v0.1)

Lesen (immer verfügbar):

Tool IPS-Funktion Zweck
ips_get_value GetValue aktuellen Variablenwert lesen
ips_get_variable IPS_GetVariable (+Wert+Name) Variablen-Metadaten (Typ, Profil, Zeitstempel)
ips_get_object IPS_GetObject Objekt-Metadaten + Parent/Children (Tree-Navigation)
ips_list_children IPS_GetChildrenIDs direkte Kinder mit id/name/typ (Baum durchblättern, Start: 0)
ips_find_object_by_name IPS_GetObjectIDByName Objekt-ID per exaktem Namen finden
ips_get_variable_by_path IPS_GetObjectIDByName (Pfad-Walk) Variablenwert per Objektpfad lesen (Räume/Büro/Zustand) statt per ID
ips_get_object_tree IPS_GetObject/-GetChildrenIDs (rekursiv) ganzen Teilbaum auf einmal als verschachteltes {id,name,type,children} (max_depth)
ips_snapshot_variables GetValue (n×) Werte mehrerer Variablen als Snapshot festhalten
ips_diff_variables GetValue (n×) Snapshot gegen Live-Werte diffen → was hat sich geändert (Wirkungskontrolle)
ips_export_subtree IPS_GetObject/-Variable/-ScriptContent/-Event/-Instance/-Link Teilbaum → reiches JSON für Backup/Migration (Variable Typ+Profil+Wert, Skript-Content, Event/Instanz/Link-Detail)
ips_get_script_content IPS_GetScriptContent PHP-Quelltext eines Skripts lesen

Schreiben/Entwickeln (nur mit IPS_ENABLE_WRITE=true):

Tool IPS-Funktion Zweck
ips_set_value SetValue Variablenwert direkt setzen
ips_request_action RequestAction Aktor schalten (löst Action aus)
ips_run_script IPS_RunScript Skript ausführen (fire-and-confirm, ohne Ausgabe)
ips_run_script_capture IPS_RunScriptWaitEx Skript ausführen und die Ausgabe zurückgeben — Basis fürs agentische bauen→ausführen→prüfen→nachbessern. Optionale parameters landen im Skript als $_IPS['key'].
ips_set_script_content IPS_SetScriptContent PHP-Quelltext überschreiben
ips_create_script IPS_CreateScript (+Parent/Name/Content) neues PHP-Skript anlegen
ips_create_category IPS_CreateCategory Kategorie anlegen (Objektbaum strukturieren)
ips_create_variable IPS_CreateVariable (+Profil) typisierte Variable anlegen (boolean/integer/float/string, optional Profil)
ips_create_event IPS_CreateEvent Event-Hülle anlegen (triggered/cyclic/weekly); Detail-Config via ips_call
ips_call beliebig Generischer Gateway für volle API-Abdeckung (z. B. IPS_CreateInstance, IPS_SetEventCyclic)

Hinweis zu ips_run_script_capture: IP-Symcon erfasst die Ausgabe des Skripts (was es echo/printt) — ein top-level PHP-return wird nicht zurückgegeben (kommt leer). Das Skript muss sein Ergebnis also echoen.


Skill (Playbook für Claude Code)

Mitgeliefert in skills/ipsymcon/ — das Domänen-Können auf den Tools: Plan-First-Sicherheitsworkflow (read → plan → approve → execute → report), Tool-Übersicht, IPS-Objektmodell. Aufgeteilt nach dem Prinzip Anweisung im Skill, Workflow separat:

  • SKILL.md — die Direktive: die eine Regel (vor Schreibzugriff planen), die 21 Tools, Struktur-Primer.
  • references/workflow.md — die detaillierten Workflows + Plan-/Report-Templates + Fallstricke.
  • references/ips-functions.mdips_call-Funktions-Cheat-Sheet (Event-Trigger, Profile, Instanzen).

Claude Code: nach ~/.claude/skills/ipsymcon/ kopieren oder dorthin symlinken. So wachsen Tools (MCP) und Playbook (Skill) im selben Repo/Release im Gleichschritt.


Roadmap

  • [x] Multi-Instanz-Support (v0.4) — benannte Verbindungen über IPS_INSTANCES_FILE (YAML), optionaler instance-Parameter je Tool (über _Base), Default-Instanz, abwärtskompatibel zum einzelnen IPS_URL. TDD + Live-Test (Default + benannte Instanz + unbekannte Instanz). Treiber: IPS-Migration auf Linux — aus Alt- und Neu-Instanz lesen, vergleichen, migrieren, verifizieren.
  • [x] ips_run_script_capture (v0.2) — Skript via IPS_RunScriptWaitEx ausführen und die Ausgabe zurückgeben (echo, nicht return — siehe Hinweis oben). Grundlage für agentisches Entwickeln (bauen → ausführen → Ergebnis prüfen → nachbessern). Optionale $_IPS-Parameter. Unit-Tests + Live-Test grün.
  • [ ] ips_read_log — Log-Abruf über das Companion-Modul SymconMCPBridge: ein residenter MessageSink mit gefiltertem Ring-Buffer (KL_ERROR/KL_WARNING/…), der die öffentliche Funktion MCPB_GetLog($id, level, count, filter) per JSON-RPC bereitstellt. ips_read_log ruft dann nur diese Funktion (kein Inline-PHP, kein Logfile-Parsen). Hintergrund: IP-Symcon hat kein direktes „getMessages" (Meldungsfenster = Live-Abo); IPS_GetLogDir() gäbe nur die rohe Logdatei.
  • [x] Companion-Modul SymconMCPBridge (MIT, released) — IP-Symcon-seitiges Modul, das Kernel-Log-Meldungen als gefilterten Ring-Buffer über JSON-RPC bereitstellt. Basis für ips_read_log und tiefere Bridge-/Helper-Funktionen. Installation via Module Control (Git-Repo).
  • [x] Dedizierte Tools: ips_create_variable, ips_create_event, ips_create_category (v0.2 — TDD + Live-Test). Detail-Config (Trigger/Cyclic/Schedule) via ips_call.
  • [ ] Dry-Run-Modus + automatisches Snapshot-Backup vor Schreibzugriffen
  • [x] Beobachtungs-/Navigations-Tools (v0.3, aus dem Community-Vergleich): ips_get_object_tree (ganzer Teilbaum), ips_get_variable_by_path (Pfad statt ID), ips_snapshot_variables + ips_diff_variables (Wirkungskontrolle build→run→diff). TDD + Live-Test.
  • [x] ips_export_subtree — Backup-Hälfte: Teilbaum → reiches JSON (Variable Typ+Profil+Wert, Skript-Content, Event/Instanz/Link-Detail). Deterministisch, read-only. TDD + Live-Test.
  • [ ] ips_import_subtree + Migrations-Skill — Restore-/Migrations-Hälfte: Objekte mechanisch anlegen (MCP, gibt alte→neue ID-Map zurück) + agentische Adaption (semantisches Matching, Referenz-Umschreiben in Events/Skripten/Links/Instanz-Configs) als Skill. Hängt an Multi-Instanz-Support.
  • [ ] Evaluations (mcp-builder Phase 4)
  • [ ] Gegenstück: Home-Assistant Dev-MCP (zweite Backend-Schicht des Fusionsprojekts)

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选