Skip to main content
Glama

Submit Form Answer

submit_form_answer

Formular-Antwort SPEICHERN oder ABSENDEN. form_udid aus list_formdefs, answer_udid aus prepare_form_answer. OHNE answer_udid wird eine NEUE Antwort angelegt. 'values' = {feld-key: wert}, Keys aus show_formdef, Werte muessen die Feldregeln erfuellen (Select: nur erlaubte Optionswerte). SUBFORM/EINZELPOSTEN: ein Subform-Feld bekommt eine LISTE von Zeilen-Objekten, z.B. {"materialverbraucht": [{"material": "Bettlaken", "quantity": "1", "unit": "Stk"}, {...}]} — die Feld-Keys der Zeilen stehen im subform.fields der formdef (show_formdef). Skalare Felder bleiben einfach. 'status': 'draft' (speichern) oder 'sent' (absenden; committet in den target_scope der Action). VERHALTEN DER VALIDIERUNG: jeder Regelverstoss bricht mit HTTP 400 ab und liefert die Fehler je Feld ({errors:[{key,msg}]}) - es wird dann NICHTS gespeichert. Genau damit testest du ein Formular fachlich durch: gueltige Werte senden und pruefen, ob sie ankommen; ungueltige Werte senden und pruefen, ob die Regeln greifen. Eine einmal mit 'sent' abgesendete Antwort ist gesperrt (erneutes Absenden legt eine neue Antwort an).

Input Schema

NameRequiredDescriptionDefault
actionNoWICHTIG BEIM ABSENDEN: waehlt den konfigurierten Button der formdef. Format 'button:<index>' — der Index zeigt in formdef.buttons[] (Reihenfolge wie in show_formdef, erster Button = 0). NUR ein Button vom Typ 'send' loest den Mailversand (inkl. PDF-Anhang) aus; ein Button vom Typ 'saveandgoto' leitet auf eine feste URL weiter. Ohne 'action' wird nur gespeichert — dann geht KEINE Mail raus, auch wenn status='sent' gesetzt ist. Empfaenger/Betreff stehen in der formdef (Config), NICHT hier — sie sind bewusst nicht per Request aenderbar.
statusNo'draft' (speichern) oder 'sent' (absenden)
valuesNo{feld-key: wert}, Keys aus show_formdef. Subform-Felder: Liste von Zeilen-Objekten [{feld: wert, ...}] (Feld-Keys aus subform.fields der formdef).
form_udidYesFormdef-udid (32-hex) aus list_formdefs
answer_udidNoAntwort-udid aus prepare_form_answer

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added
  2. Removed
  3. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say this is a non-read-only, non-idempotent, non-destructive write. The description goes far beyond: atomic validation (HTTP 400, {errors:[{key,msg}]}, nothing persisted on any rule violation), the lock after 'sent', and the non-obvious rule that no mail is sent without an 'action' button even when status='sent'. These are exactly the behaviors an agent cannot infer.

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

Conciseness4/5

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

Front-loaded with the core action in one line, then progressively deeper detail (key sourcing, values format, subform example, status, validation, locking). Every section adds information, though the subform example and the status restatement overlap slightly with the schema descriptions.

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

Completeness5/5

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

For a 5-parameter nested-object mutation tool with no output schema, the description covers the full lifecycle: prerequisites (form_udid/answer_udid provenance), payload semantics, validation failure format, commit target for 'sent', and the post-submit lock. Nothing an agent needs to call it correctly is missing.

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 coverage is 100%, so the baseline is 3; the description earns extra by giving the concrete subform shape ({'materialverbraucht': [{'material': 'Bettlaken', ...}]}) and stating that scalar fields stay flat while subform fields take a list of row objects keyed by subform.fields. It does not restate the 'action' semantics, but the schema already carries those in detail.

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

Purpose5/5

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

Opens with a specific verb+resource pair ('Formular-Antwort SPEICHERN oder ABSENDEN') and immediately distinguishes the two modes (draft vs. sent) plus the two creation paths (with/without answer_udid). An agent can tell exactly what this does and how it differs from prepare_form_answer, show_form_answer, and resolve_form_answer.

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

Usage Guidelines5/5

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

Explicitly routes the agent: form_udid comes from list_formdefs, answer_udid from prepare_form_answer, field keys from show_formdef. It also names a concrete use case (valid/invalid value testing to exercise form rules) and states that re-sending a 'sent' answer creates a new one rather than failing.

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.