Skip to main content
Glama

Open the final service confirmation card

render_service_request_form
Read-onlyIdempotent

Open the protected contact/terms/Confirm card only after company choice. Pass the explicitly chosen company's option_key from current service_options; omit it only for a single option or a previously selected company. When a live card is displayed, omit prose or use at most one short neutral sentence: use only assistant_message in the customer's language (English: "Details and current status are in the card."). End the reply there. Do not add an introduction, summary, instructions to review or confirm, or claims that a booking is created or not yet created: this text remains after the card changes. Do not repeat companies, dates, times, prices, policies, booking references, status claims, comparisons or next steps outside the card. This applies only to successful card presentation; keep normal intake/choice questions and concise error or unavailable-UI guidance.

Input Schema

NameRequiredDescriptionDefault
option_keyNoExact option_key from this request's current service_options for the company explicitly chosen by the user. Never infer a choice from price or ordering.
request_idYes

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedOutput schema / properties / result / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "next_action": {
      -        "enum": [
      -          "complete_protected_form",
      -          "confirmed"
      -        ],
      -        "type": "string"
      -      },
      -      "request_id": {
      -        "type": "string"
      -      },
      -      "state_version": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "user_stage": {
      -        "const": "confirmation",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "request_id",
      -      "state_version",
      -      "user_stage",
      -      "next_action"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "category": {
      -            "type": "string"
      -          },
      -          "code": {
      -            "type": "string"
      -          },
      -          "correlation_id": {
      -            "type": "string"
      -          },
      -          "details": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "message": {
      -            "type": "string"
      -          },
      -          "retryable": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "category",
      -          "message",
      -          "retryable",
      -          "correlation_id",
      -          "details"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "assistant_message": {
      +        "const": "Details and current status are in the card.",
      +        "description": "The only permitted optional caption for the live card. Translate to the customer's language without adding details or instructions.",
      +        "type": "string"
      +      },
      +      "presentation": {
      +        "const": "interactive_card",
      +        "type": "string"
      +      },
      +      "request_id": {
      +        "type": "string"
      +      },
      +      "state_version": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "request_id",
      +      "state_version",
      +      "presentation",
      +      "assistant_message"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "category": {
      +            "type": "string"
      +          },
      +          "code": {
      +            "type": "string"
      +          },
      +          "correlation_id": {
      +            "type": "string"
      +          },
      +          "details": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "message": {
      +            "type": "string"
      +          },
      +          "retryable": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "category",
      +          "message",
      +          "retryable",
      +          "correlation_id",
      +          "details"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed1 schema field changed
    • changedOutput schema / properties / result / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "next_action": {
      -        "const": "complete_protected_form",
      -        "type": "string"
      -      },
      -      "request_id": {
      -        "type": "string"
      -      },
      -      "state_version": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "user_stage": {
      -        "const": "confirmation",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "request_id",
      -      "state_version",
      -      "user_stage",
      -      "next_action"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "category": {
      -            "type": "string"
      -          },
      -          "code": {
      -            "type": "string"
      -          },
      -          "correlation_id": {
      -            "type": "string"
      -          },
      -          "details": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "message": {
      -            "type": "string"
      -          },
      -          "retryable": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "category",
      -          "message",
      -          "retryable",
      -          "correlation_id",
      -          "details"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "next_action": {
      +        "enum": [
      +          "complete_protected_form",
      +          "confirmed"
      +        ],
      +        "type": "string"
      +      },
      +      "request_id": {
      +        "type": "string"
      +      },
      +      "state_version": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "user_stage": {
      +        "const": "confirmation",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "request_id",
      +      "state_version",
      +      "user_stage",
      +      "next_action"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "category": {
      +            "type": "string"
      +          },
      +          "code": {
      +            "type": "string"
      +          },
      +          "correlation_id": {
      +            "type": "string"
      +          },
      +          "details": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "message": {
      +            "type": "string"
      +          },
      +          "retryable": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "category",
      +          "message",
      +          "retryable",
      +          "correlation_id",
      +          "details"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  3. Changed1 schema field changed
    • changedOutput schema / properties / result / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": {},
      -    "properties": {
      -      "field_batch": {
      -        "additionalProperties": {},
      -        "properties": {
      -          "conditionally_required": {
      -            "items": {},
      -            "type": "array"
      -          },
      -          "optional": {
      -            "items": {},
      -            "type": "array"
      -          },
      -          "required": {
      -            "items": {},
      -            "type": "array"
      -          }
      -        },
      -        "required": [
      -          "required",
      -          "conditionally_required",
      -          "optional"
      -        ],
      -        "type": "object"
      -      },
      -      "known_fields": {
      -        "additionalProperties": {},
      -        "propertyNames": {
      -          "type": "string"
      -        },
      -        "type": "object"
      -      },
      -      "next_action": {
      -        "type": "string"
      -      },
      -      "request_id": {
      -        "type": "string"
      -      },
      -      "state_version": {
      -        "maximum": 9007199254740991,
      -        "minimum": -9007199254740991,
      -        "type": "integer"
      -      },
      -      "user_stage": {
      -        "enum": [
      -          "intake",
      -          "matching",
      -          "confirmation"
      -        ],
      -        "type": "string"
      -      },
      -      "vertical_id": {
      -        "type": "string"
      -      },
      -      "vertical_introduction": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "message": {
      -            "type": "string"
      -          },
      -          "present_once": {
      -            "const": true,
      -            "type": "boolean"
      -          },
      -          "presentation_order": {
      -            "const": "lead_same_message",
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "message",
      -          "presentation_order",
      -          "present_once"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "request_id",
      -      "state_version",
      -      "vertical_id",
      -      "user_stage",
      -      "known_fields",
      -      "field_batch",
      -      "next_action"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "error": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "category": {
      -            "type": "string"
      -          },
      -          "code": {
      -            "type": "string"
      -          },
      -          "correlation_id": {
      -            "type": "string"
      -          },
      -          "details": {
      -            "additionalProperties": {},
      -            "propertyNames": {
      -              "type": "string"
      -            },
      -            "type": "object"
      -          },
      -          "message": {
      -            "type": "string"
      -          },
      -          "retryable": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "code",
      -          "category",
      -          "message",
      -          "retryable",
      -          "correlation_id",
      -          "details"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "error"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "next_action": {
      +        "const": "complete_protected_form",
      +        "type": "string"
      +      },
      +      "request_id": {
      +        "type": "string"
      +      },
      +      "state_version": {
      +        "maximum": 9007199254740991,
      +        "minimum": -9007199254740991,
      +        "type": "integer"
      +      },
      +      "user_stage": {
      +        "const": "confirmation",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "request_id",
      +      "state_version",
      +      "user_stage",
      +      "next_action"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "error": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "category": {
      +            "type": "string"
      +          },
      +          "code": {
      +            "type": "string"
      +          },
      +          "correlation_id": {
      +            "type": "string"
      +          },
      +          "details": {
      +            "additionalProperties": {},
      +            "propertyNames": {
      +              "type": "string"
      +            },
      +            "type": "object"
      +          },
      +          "message": {
      +            "type": "string"
      +          },
      +          "retryable": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "code",
      +          "category",
      +          "message",
      +          "retryable",
      +          "correlation_id",
      +          "details"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "error"
      +    ],
      +    "type": "object"
      +  }
      +]
  4. Changed1 schema field changed
    • addedInput schema / properties / option_key
      Added value: +{
      +  "description": "Exact option_key from this request's current service_options for the company explicitly chosen by the user. Never infer a choice from price or ordering.",
      +  "maxLength": 100,
      +  "minLength": 10,
      +  "type": "string"
      +}
  5. First observed

TDQS

A4.1/5.0
Behavior4/5

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

Annotations cover only the safety profile (read-only, idempotent, closed-world); the description adds genuinely non-obvious behavior: the card is 'live', text persists after the card changes, and the no-prose rule applies only to successful presentation, not to errors. It does not discuss permissions for the 'protected' card, which is the one gap.

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 critical precondition and parameter rule are front-loaded, but the second half is a long, repetitive chain of prohibitions (do not add, do not repeat, do not claim) that restate the same message-discipline rule several ways and inflate the definition.

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?

An output schema exists, so return values need no explanation, and the description covers preconditions, parameter sourcing, and the reply protocol after a successful render. Error/unavailable-UI handling is deferred rather than described, which is a minor omission.

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 50% (request_id is undocumented), so the description carries real weight: it defines where option_key comes from ('current service_options'), which choice it must encode (explicitly chosen company), and two cases where it is omitted. This adds semantics beyond the schema's 'never infer from price or ordering'.

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?

States a concrete action (open/render a confirmation card) plus a precondition (only after company choice), and implicitly separates itself from create_service_booking by forbidding booking claims. The card's identity ('protected contact/terms/Confirm card') is jargon-heavy but decipherable from the title.

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?

Gives explicit when-to-call ('only after company choice'), explicit parameter-handling rules (omit option_key only for a single option or a previously selected company), and an explicit scope limit ('applies only to successful card presentation; keep normal intake/choice questions and concise error guidance').

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.

Resources