ipsymcon-mcp-server
Click on "Deploy 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., "@ipsymcon-mcp-serverlist children of root object"
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.
ipsymcon-mcp-server
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 UmgebungsvariableIPS_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.)
Related MCP server: Homey MCP Server
Voraussetzungen in IP-Symcon
JSON-RPC-Zugang ist standardmäßig aktiv unter
http://<host>:3777/api/.Einen Benutzer mit Zugriff anlegen (Systemsteuerung → Benutzerverwaltung) → in
IPS_USER/IPS_PASSWORDeintragen. 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üllenSkills als Claude-Plugin
Die fünf Skills unter skills/ sind als Claude-Code-Plugin gebündelt
(.claude-plugin/plugin.json) und lassen sich damit installieren,
statt sie von Hand nach ~/.claude/skills/ zu kopieren.
⚠️ Das Plugin liefert nur die Skills, nicht den Server. Der MCP-Server wird weiterhin wie oben
installiert und in der eigenen MCP-Konfiguration eingetragen — er braucht ein venv und eine .env
mit der IPS-Adresse, beides kann ein Plugin nicht mitbringen. Ohne laufenden Server sind die
Skills wirkungslos. (Ein .mcp.json im Plugin wird erst sinnvoll, wenn der Server per uvx
installierbar ist — steht auf der Roadmap.)
Konfiguration (.env)
Variable | Bedeutung |
| JSON-RPC-Endpunkt, z. B. |
| Basic-Auth-Zugangsdaten (leer, falls keine Auth) |
|
|
| optional: Pfad zu einer YAML mit mehreren benannten Instanzen (s. u.) |
⚠️
https://verwenden, sobaldIPS_USER/IPS_PASSWORDgesetzt sind. Basic Auth überträgt Benutzer und Passwort nur base64-kodiert — überhttp://liest sie jeder mit, der im selben Netz hängt, samt aller Schaltbefehle. IP-Symcon liefert auf Port 3777 standardmäßig unverschlüsseltes HTTP aus; TLS ist also eine bewusste Entscheidung, kein Automatismus.⚠️
chmod 600für.envund die echteinstances.yaml— beide enthalten Zugangsdaten im Klartext.✅ Seit 2026-08-15 lässt sich das pro Instanz begrenzen. In der Instanzen-YAML kann jede Instanz ein
enable_write: true|falsetragen. Beide Tore müssen zustimmen — die Env-Variable und das Instanz-Flag.enable_write: trueerlaubt nie etwas allein;enable_write: falseentzieht Schreibrechte aber auch bei gesetzter Env-Variable. Damit ist die Empfehlung, nur gegen eine Testinstanz freizuschalten, erstmals umsetzbar: Migrationsziel offen, bewohntes Haus dicht. Ohne Angabe erbt eine Instanz die Env-Variable — bestehende Setups laufen unverändert.⚠️
ips_export_subtreeexportiert Instanz-Konfigurationen nur noch auf ausdrückliche Anforderung (include_configuration=true, Default aus). Diese Blöcke tragen regelmäßig Zugangsdaten von Integrationen (FritzBox, Hue, Cloud-Keys) — sie aus einem als read-only markierten Werkzeug herauszugeben machte aus reinem Lesen einen Abfluss von Zugangsdaten in den Modellkontext.
⚠️
IPS_ENABLE_WRITE=trueist mehr als „Variablen setzen". Damit sind auchips_create_script,ips_run_scriptundips_calloffen — das ist Codeausführung auf dem IP-Symcon-Server mit dessen Rechten. Die „erst planen, dann ausführen"-Regel ist eine Anweisung an das Sprachmodell, kein technischer Riegel: Der Server prüft nur dieses eine Boolean. Wer den MCP-Client kontrolliert, hat bei offenem Gate vollen Zugriff auf die Haussteuerung.
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: https://192.168.1.10:3777/api/
user: ""
password: ""
linux:
url: https://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.pyRegistrierung 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 |
| GetValue | aktuellen Variablenwert lesen |
| IPS_GetVariable (+Wert+Name) | Variablen-Metadaten (Typ, Profil, Zeitstempel) |
| IPS_GetObject | Objekt-Metadaten + Parent/Children (Tree-Navigation) |
| IPS_GetChildrenIDs | direkte Kinder mit id/name/typ (Baum durchblättern, Start: 0) |
| IPS_GetObjectIDByName | Objekt-ID per exaktem Namen finden |
| IPS_GetObjectIDByName (Pfad-Walk) | Variablenwert per Objektpfad lesen ( |
| IPS_GetObject/-GetChildrenIDs (rekursiv) | ganzen Teilbaum auf einmal als verschachteltes |
| GetValue (n×) | Werte mehrerer Variablen als Snapshot festhalten |
| GetValue (n×) | Snapshot gegen Live-Werte diffen → was hat sich geändert (Wirkungskontrolle) |
| 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_GetScriptContent | PHP-Quelltext eines Skripts lesen |
Schreiben/Entwickeln (nur mit IPS_ENABLE_WRITE=true):
Tool | IPS-Funktion | Zweck |
| SetValue | Variablenwert direkt setzen |
| RequestAction | Aktor schalten (löst Action aus) |
| IPS_RunScript | Skript ausführen (fire-and-confirm, ohne Ausgabe) |
| IPS_RunScriptWaitEx | Skript ausführen und die Ausgabe zurückgeben — Basis fürs agentische bauen→ausführen→prüfen→nachbessern. Optionale |
| IPS_SetScriptContent | PHP-Quelltext überschreiben |
| IPS_CreateScript (+Parent/Name/Content) | neues PHP-Skript anlegen |
| IPS_CreateCategory | Kategorie anlegen (Objektbaum strukturieren) |
| IPS_CreateVariable (+Profil) | typisierte Variable anlegen ( |
| IPS_CreateEvent | Event-Hülle anlegen ( |
| IPS_CreateCategory/-Variable/-Script (+SetParent/Name/Profil/Wert/Content) | Teilbaum aus |
| 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 esecho/returnwird nicht zurückgegeben (kommt leer). Das Skript muss sein Ergebnis alsoechoen.
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 22 Tools, Struktur-Primer.references/workflow.md— die detaillierten Workflows + Plan-/Report-Templates + Fallstricke.references/ips-functions.md—ips_call-Funktions-Cheat-Sheet (Event-Trigger, Profile, Instanzen).
Dazu der eigenständige Migrations-Skill skills/ips-migration/ — Greenfield-Migration eines Teilbaums auf eine andere Instanz (Export → Plan-First mit Modul-Check/Referenz-Scan/Flags → Zwei-Pass: anlegen, dann Referenzen via ID-Map verdrahten → Verify), aufbauend auf ips_export_subtree/ips_import_subtree.
Und der Cleanup-Skill skills/ips-cleanup/ — IPS-Health-Review + Phase 0 der Migration: Error-Scan (Instanzen mit Status ≥ 200) → Triage → 3-Vektor-Dependency-Analyse (Kinder · Links · ConnectionID) → Plan-First-Cascade-Delete + sicheres Fixen (Credentials werden geflaggt, nie geraten) → Verify. Erprobte Scan-Snippets mitgeliefert.
Claude Code: nach ~/.claude/skills/ipsymcon/ (bzw. …/ips-migration/) kopieren oder dorthin symlinken. So wachsen Tools (MCP) und Playbook (Skill) im selben Repo/Release im Gleichschritt.
Die Runbooks kommen auch über die MCP-Schnittstelle (v0.5)
Skill-Ordner und Claude-Code-Plugin setzen beide voraus, dass jemand sie installiert. Wer den Server ohne das Plugin einbindet — anderer Client, anderer Rechner, jemand anderes — bekommt 22 Tools und keinen Hinweis darauf, dass es Betriebsanweisungen dazu gibt. Die wichtigste davon ist kein Komfort, sondern ein Sicherheitsverhalten: Plan zeigen, bevor geschrieben wird.
Deshalb liefert der Server sie zusätzlich selbst aus — über zwei MCP-Primitives:
Weg | Charakter | Inhalt |
| Push — landet ungefragt im Systemprompt, auch ohne Plugin | Zweck · die harte Schreibgrenze · ein Zeiger auf die Runbooks |
| Pull — auf Abruf | ein Prompt je Runbook, in Claude Code als |
/mcp__ipsymcon__ipsymcon Einstieg: Objektbaum, Skripte, Variablen, Events
/mcp__ipsymcon__ips-automation Eine NEUE Automation entwerfen
/mcp__ipsymcon__ips-cleanup Rote Logs, tote Instanzen, verwaiste Objekte
/mcp__ipsymcon__ips-migration Teilbaum auf eine andere Instanz umziehen
/mcp__ipsymcon__ips-refactor Umstrukturieren ohne VerhaltensänderungDie Entwurfsregel dahinter ist wichtiger als die Funktion: im Server steht kein Skill-Text. Die Prompts lesen die SKILL.md-Dateien (plus references/) zur Laufzeit aus skills/. Eine Kopie wäre ein zweiter Stand, der irgendwann vom ersten abweicht — und der Server hätte dann eine Sicherheitsregel behauptet, die im Repo längst anders lautet. Eine Datei, drei Auslieferungswege (Skill-Ordner · Plugin · MCP). Ein Test prüft genau das: Datei ändern → Prompt-Ausgabe muss sich mitändern.
Fehlt skills/ (etwa bei reiner Paketinstallation ohne Repo), meldet der Prompt das mit Bezugsquelle, statt leer zurückzukommen.
Roadmap
Runbooks über die MCP-Schnittstelle (v0.5) —
instructionsiminitialize-Handshake (Push: Zweck + Schreibgrenze + Zeiger auf die Runbooks, kommt auch ohne installiertes Plugin an) plus ein Prompt je Runbook (/mcp__ipsymcon__<name>). Kein Skill-Text im Server: die Prompts lesenSKILL.md+references/zur Laufzeit ausskills/— eine Datei, drei Auslieferungswege (Skill-Ordner · Plugin · MCP). Am echten Protokoll verifiziert, 10 Tests inkl. „Datei ändern → Prompt-Ausgabe ändert sich mit".Multi-Instanz-Support (v0.4) — benannte Verbindungen über
IPS_INSTANCES_FILE(YAML), optionalerinstance-Parameter je Tool (über_Base), Default-Instanz, abwärtskompatibel zum einzelnenIPS_URL. TDD + Live-Test (Default + benannte Instanz + unbekannte Instanz). Treiber: IPS-Migration auf Linux — aus Alt- und Neu-Instanz lesen, vergleichen, migrieren, verifizieren.ips_run_script_capture(v0.2) — Skript viaIPS_RunScriptWaitExausführen und die Ausgabe zurückgeben (echo, nichtreturn— 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 FunktionMCPB_GetLog($id, level, count, filter)per JSON-RPC bereitstellt.ips_read_logruft 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.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_logund tiefere Bridge-/Helper-Funktionen. Installation via Module Control (Git-Repo).Dedizierte Tools:
ips_create_variable,ips_create_event,ips_create_category(v0.2 — TDD + Live-Test). Detail-Config (Trigger/Cyclic/Schedule) viaips_call.Dry-Run-Modus + automatisches Snapshot-Backup vor Schreibzugriffen
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.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(v0.4 — TDD + Live-Round-Trip) — Restore-/Migrations-Hälfte: cat/var/script mechanisch anlegen, alte→neue ID-Map zurückgeben; Instanzen/Events/Links bewusstskipped. Deterministisches Struktur-Primitiv.Migrations-Skill
skills/ips-migration/— agentische Adaption (Greenfield v1): Export → Plan-First (Modul-Check + Referenz-Scan + Flags) → Zwei-Pass (anlegen → Referenzen via ID-Map verdrahten) → Verify. Semantisches Matching auf bestehende Ziel-Objekte + Bewertung/Refactoring = spätere Skills.Cleanup-Skill
skills/ips-cleanup/— IPS-Health-Review + Vor-Migrations-Cleanup (Phase 0): Error-Scan (Status ≥ 200) → Triage → 3-Vektor-Dependency-Analyse (Kinder/Links/ConnectionID) → Plan-First-Cascade-Delete + sicheres Fixen (Credentials geflaggt) → Verify. Scan-Snippets mitgeliefert, live validiert.Evaluations (mcp-builder Phase 4)
Gegenstück: Home-Assistant Dev-MCP (zweite Backend-Schicht des Fusionsprojekts)
Maintainer
Schimmi — https://schimmilab.de Issues und Pull Requests willkommen.
This server cannot be deployed
Maintenance
Related MCP Connectors
Work on your own computers from Claude or ChatGPT: run commands, edit and search files.
Use your Mac, Windows or Linux computer from ChatGPT, Claude or Codex: files, commands, documents.
Control your existing Philips lights, Sonos speakers, Roborock vacuums and other supported devices through Port OS cloud. Give ChatGPT, Claude and other MCP-compatible assistants access to the devices you connect. Turn off the living room lights, play music on your speakers, adjust the thermostat, run a vacuum in a room, check a camera snapshot or find a connected tracker. Available actions depend on your linked provider accounts and each device’s supported capabilities. Port OS runs in the cloud; no local server is required. You choose the account, device and capability permissions each assistant receives. Device operations require user OAuth; public tool discovery does not grant device access. Port OS is in alpha. Setup: https://portoperatingsystem.com/docs/getting-started/ Support: https://portoperatingsystem.com/contact/
- ZionDeskOAuthapp.ziondesk
Connect ChatGPT, Claude, Cursor or VS Code to your Windows PC: files, terminal, browser, apps.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with SIEMENS PLC S7-1500/1200 controllers through their JSON-RPC API, supporting authentication, tag browsing, variable read/write operations, alarm management, and diagnostic buffer access.12ISC
- AlicenseNot gradedqualityDmaintenanceEnables Claude AI to control and manage Homey Pro smart home devices, flows, and analytics through natural language.12MIT
- AlicenseAqualityFmaintenanceEnables Claude to read, analyze, optimize, and execute IP-Symcon PHP scripts via JSON-RPC API, turning automation development into a dialogue.13MIT
- AlicenseAqualityCmaintenanceConnects Claude and other MCP clients to myGEKKO building controllers via the official Query API, enabling natural-language queries and control of smart-home devices. It is read-only by default, with write actions available only through explicit opt-in and safety policies.3MIT