Skip to main content
Glama

Update Interface Definition

onto_interface_update_def
DestructiveIdempotent

Eine bestehende Interface-Definition aendern (Felder, Reihenfolge, Sichtbarkeit). Betrifft die Sicht, nicht die Daten. Nutze es zum Anpassen einer Maske; welche Felder es ueberhaupt gibt, zeigt onto_property_def_index. Der bisherige Wert ist danach weg (keine Historie, kein Undo). | EN: onto, interface, update, def Verengung (optional): table.scopes mit Scopenamen schraenkt die Zeilen dieser Ansicht zusaetzlich auf diese Scopes ein (nur einschraenkend, unbekannter Name = 400). Die Ansicht zeigt sie unter der Ueberschrift an; trage sie zusaetzlich in die description des Interfaces ein.

Input Schema

NameRequiredDescriptionDefault
labelNoLabel
rolesNoRollen
def_idYesInterface-Definition-ID
scope_idNoScope-ID (Tuer-Scope)
descriptionNoBeschreibung
view_configNoview_config-JSON. Listen ohne SQL: {"elements":["table"],"table":{"from":"objects","type":"shift","columns":[...]}}. Spalte: {"key", "prop" | "system"(udid,name,created,modified,scope,type) | "link"+"richtung"(vorwaerts/rueckwaerts)+("linkvalue", "type", "prop" = Feld des Ziels), optional "label", "format"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), "bis":"<prop>" (nur mit format zeitspanne; ergibt 09:00 - 15:30), "werte"{Schluessel:Anzeige}, "link_zelle", "hidden"}. Sammelspalte: {"key", "agg":"count|sum|min|max", "link", "richtung", "prop", "ziel":{"wo":[{"prop","op","wert"}]}}. Link-Gruppen: "links":{"Name":{"link","richtung","type","wo":[{...}],"sort":{...}}} — alle Spalten mit "link":"Name" lesen DASSELBE Objekt (Auswahl einmal definiert). "filter", "sort", "zeitraum" nennen nur Spalten-Keys. "person" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: "prop":["firstName","lastName"] verbindet Felder ("trenner"), "bis":"shiftEnd" mit "format":"zeitspanne" ergibt 09:00 - 15:30, "nur":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: "matrix":{"rows":{from,type,label,nur_mit{linktyp,type}},"cells":{from,type,bruecke{linktyp,type},zeitfeld,text[],"wo":[{prop,op,wert}]}}, wobei "wo" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: "detail":{"type":"person","fields":[{prop|system,key?,label,format,werte}],"panels":[{"type":"subform","from":"objects","objekt":"shift","via":{"link":"worksShift"|[...],"richtung":"vorwaerts|rueckwaerts","linkvalue":optional},"wo":[...],"sort":{key|prop,dir},"columns":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; "wo" auf Tabellen-Ebene sind Bedingungen an die GRUNDMENGE (z.B. Personenbindung "wo":[{"prop":"email","op":"=","wert":"{'current_user_email'}"}]). Der Text-Platzhalter MUSS in der Definition in einfachen Anfuehrungszeichen stehen ({'current_user_email'}) - der Baustein setzt ihn als '{current_user_email}' ein, der Renderer ersetzt ihn roh. Ohne Quotes lehnt der Validator ab.; ein Zelltext-Eintrag mit "werte":{"abgesagt":"abgesagt","_":""} zeigt den Zusatz NUR bei diesem Wert ("_" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie "sql" nur fuer Administratoren.
data_scope_idNoLese-Scope der Daten, wenn die Ansicht in einem anderen (Tuer-)Scope liegt. Verlangt eine Personenbindung in der SQL ({current_user_email}, {current_profile_id} oder {current_user_id}).
object_type_idsNoObjekttyp-IDs

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; \"wo\" auf Tabellen-Ebene sind Bedingungen an die GRUNDMENGE (z.B. Personenbindung \"wo\":[{\"prop\":\"email\",\"op\":\"=\",\"wert\":\"{'current_user_email'}\"}]). Der Text-Platzhalter MUSS in der Definition in einfachen Anfuehrungszeichen stehen ({'current_user_email'}) - der Baustein setzt ihn als '{current_user_email}' ein, der Renderer ersetzt ihn roh. Ohne Quotes lehnt der Validator ab.; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  2. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt; ein Zelltext-Eintrag mit \"werte\":{\"abgesagt\":\"abgesagt\",\"_\":\"\"} zeigt den Zusatz NUR bei diesem Wert (\"_\" = alle anderen, leer = Teil weglassen — so wird eine abgesagte Schicht im Raster markiert, ohne sie zu verstecken) (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  3. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden; Detailseite ohne SQL: \"detail\":{\"type\":\"person\",\"fields\":[{prop|system,key?,label,format,werte}],\"panels\":[{\"type\":\"subform\",\"from\":\"objects\",\"objekt\":\"shift\",\"via\":{\"link\":\"worksShift\"|[...],\"richtung\":\"vorwaerts|rueckwaerts\",\"linkvalue\":optional},\"wo\":[...],\"sort\":{key|prop,dir},\"columns\":[{key,prop|system,bis,format,werte}]}]} — sql/subform_sql gewinnen weiter, wenn gesetzt; Formate und werte werden bei Unterseiten in der SQL angewandt (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  4. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[]}} (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,kalenderwoche,zeitspanne,zahl,waehrung), \"bis\":\"<prop>\" (nur mit format zeitspanne; ergibt 09:00 - 15:30), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[],\"wo\":[{prop,op,wert}]}}, wobei \"wo\" die ZELLEN nach eigenen Feldern filtert (z.B. shiftStatus != abgesagt) und mehrere Objekte derselben Zeile am selben Tag mit dem Trenner zu EINER Zelle verbunden werden (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  5. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Freie \"sql\" nur fuer Administratoren."New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Weitere Schalter: \"prop\":[\"firstName\",\"lastName\"] verbindet Felder (\"trenner\"), \"bis\":\"shiftEnd\" mit \"format\":\"zeitspanne\" ergibt 09:00 - 15:30, \"nur\":[keys] zeigt nur Zeilen mit Wert. Kalender-Raster: \"matrix\":{\"rows\":{from,type,label,nur_mit{linktyp,type}},\"cells\":{from,type,bruecke{linktyp,type},zeitfeld,text[]}} (rows = Zeilenobjekte, cells = die Objekte im Raster, bruecke nennt den Linktyp zwischen beiden). Freie \"sql\" nur fuer Administratoren."
  6. Changed1 schema field changed
    • changedInput schema / properties / view_config / description
      Previous value: -"view_config-JSON"New value: +"view_config-JSON. Listen ohne SQL: {\"elements\":[\"table\"],\"table\":{\"from\":\"objects\",\"type\":\"shift\",\"columns\":[...]}}. Spalte: {\"key\", \"prop\" | \"system\"(udid,name,created,modified,scope,type) | \"link\"+\"richtung\"(vorwaerts/rueckwaerts)+(\"linkvalue\", \"type\", \"prop\" = Feld des Ziels), optional \"label\", \"format\"(datum,zeit,wochentag_datum,wochentag_datum_zeit,zahl,waehrung), \"werte\"{Schluessel:Anzeige}, \"link_zelle\", \"hidden\"}. Sammelspalte: {\"key\", \"agg\":\"count|sum|min|max\", \"link\", \"richtung\", \"prop\", \"ziel\":{\"wo\":[{\"prop\",\"op\",\"wert\"}]}}. Link-Gruppen: \"links\":{\"Name\":{\"link\",\"richtung\",\"type\",\"wo\":[{...}],\"sort\":{...}}} — alle Spalten mit \"link\":\"Name\" lesen DASSELBE Objekt (Auswahl einmal definiert). \"filter\", \"sort\", \"zeitraum\" nennen nur Spalten-Keys. \"person\" bindet die Ansicht an die angemeldete Person (noetig fuer data_scope_id). Freie \"sql\" nur fuer Administratoren."
  7. Added

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, and the description reinforces this with "Der bisherige Wert ist danach weg (keine Historie, kein Undo)", which tells the agent the update replaces rather than patches. It also discloses validation and authorization behavior that annotations do not cover: an unknown scope name yields a 400, scopes can only narrow ("nur einschraenkend"), and free "sql" is admin-only.

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

Conciseness3/5

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

The German prose is front-loaded and purposeful, but the injected "| EN: onto, interface, update, def Verengung (optional): table.scopes ..." fragment splices a keyword line directly into a sentence about scope narrowing, which reads as an assembly artifact and breaks the flow. The genuinely useful scoping note is buried mid-paragraph instead of standing on its own.

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

Completeness4/5

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

For an 8-parameter tool with a very complex nested view_config and no output schema, the description covers the items an agent would otherwise get wrong: that it is view-only, destructive with no undo, scope-narrowing only, and that field discovery goes through another tool. The replacement-vs-patch question is answered implicitly ("bisherige Wert ist danach weg") rather than stated outright, and there is no note on permissions beyond the admin-only SQL remark.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3; the description earns above that by explaining the semantics of the scope parameter (table.scopes narrows rows of the view, is narrowing-only, unknown name = 400, must also be recorded in the interface description) and by clarifying that data_scope_id is for a view living in a different scope. It does not add anything for def_id, label, roles, or object_type_ids, which the schema already covers.

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

Purpose4/5

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

"Eine bestehende Interface-Definition aendern (Felder, Reihenfolge, Sichtbarkeit)" is a specific verb plus resource plus the exact aspects that can be changed, and "Betrifft die Sicht, nicht die Daten" separates it from data-mutating siblings like onto_object_update. The word "bestehende" implicitly distinguishes it from onto_interface_create_def, but it never names that sibling the way it names onto_property_def_index.

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?

"Nutze es zum Anpassen einer Maske" gives a clear when-to-use, and it routes the agent to onto_property_def_index for discovering which fields exist. What is missing is an explicit boundary against onto_interface_create_def (new vs. existing) and onto_interface_delete_def, so the agent must infer the split from the word "bestehende".

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.