Skip to main content
Glama

update_app

Replaces an app's code with a new version, which the user's phone picks up the next time the app opens. Send the whole file, blueprint and tests. Earlier versions are kept, so it can be undone.

Input Schema

NameRequiredDescriptionDefault
appYesThe app's address (its slug, as list_apps shows it) or its id.
htmlYesThe whole app, as one self-contained HTML file. At most 1 MB.
nameNoOptional: a new name.
noteNoWhat changed, in a few words the user would understand.
testsYesThe tests that prove every journey step and promise. Required.
blueprintYesThe app's blueprint: what it is for, the data it keeps, its journeys and promises, and the sites it talks to. Required.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedInput schema / properties / blueprint
      Added value: +{
      +  "additionalProperties": false,
      +  "description": "The app's blueprint: what it is for, the data it keeps, its journeys and promises, and the sites it talks to. Required.",
      +  "properties": {
      +    "data": {
      +      "additionalProperties": false,
      +      "description": "The data the app keeps on the phone.",
      +      "properties": {
      +        "keeps": {
      +          "description": "Each storage key and what it holds.",
      +          "items": {
      +            "additionalProperties": false,
      +            "properties": {
      +              "key": {
      +                "type": "string"
      +              },
      +              "what": {
      +                "type": "string"
      +              }
      +            },
      +            "required": [
      +              "key",
      +              "what"
      +            ],
      +            "type": "object"
      +          },
      +          "type": "array"
      +        },
      +        "version": {
      +          "description": "Raise it when the saved shape changes, and migrate the old shape on load.",
      +          "type": "integer"
      +        }
      +      },
      +      "required": [
      +        "version",
      +        "keeps"
      +      ],
      +      "type": "object"
      +    },
      +    "design": {
      +      "additionalProperties": false,
      +      "properties": {
      +        "notes": {
      +          "type": "string"
      +        },
      +        "palette": {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      },
      +      "required": [],
      +      "type": "object"
      +    },
      +    "icon": {
      +      "description": "The app's home-screen icon, one of these names; without one the icon shows the app's first letter.",
      +      "enum": [
      +        "activity",
      +        "alarm-clock",
      +        "apple",
      +        "baby",
      +        "backpack",
      +        "badge-check",
      +        "banknote",
      +        "bath",
      +        "battery",
      +        "bed",
      +        "bell",
      +        "bike",
      +        "book",
      +        "book-open",
      +        "bookmark",
      +        "brain",
      +        "briefcase",
      +        "brush",
      +        "bus",
      +        "cake",
      +        "calculator",
      +        "calendar",
      +        "calendar-check",
      +        "camera",
      +        "car",
      +        "carrot",
      +        "cat",
      +        "chart-line",
      +        "chart-pie",
      +        "chef-hat",
      +        "circle-check",
      +        "clipboard-list",
      +        "clock",
      +        "cloud",
      +        "cloud-rain",
      +        "cloud-sun",
      +        "coffee",
      +        "coins",
      +        "compass",
      +        "cookie",
      +        "credit-card",
      +        "dog",
      +        "dollar-sign",
      +        "droplet",
      +        "dumbbell",
      +        "egg",
      +        "file-text",
      +        "film",
      +        "fish",
      +        "flag",
      +        "flame",
      +        "flower",
      +        "footprints",
      +        "frown",
      +        "gamepad-2",
      +        "gift",
      +        "glass-water",
      +        "globe",
      +        "graduation-cap",
      +        "guitar",
      +        "hammer",
      +        "hand-heart",
      +        "headphones",
      +        "heart",
      +        "heart-pulse",
      +        "hospital",
      +        "house",
      +        "key",
      +        "laptop",
      +        "laugh",
      +        "leaf",
      +        "lightbulb",
      +        "list-checks",
      +        "list-todo",
      +        "luggage",
      +        "map",
      +        "map-pin",
      +        "medal",
      +        "meh",
      +        "message-circle",
      +        "mic",
      +        "moon",
      +        "mountain",
      +        "music",
      +        "notebook-pen",
      +        "package",
      +        "palette",
      +        "paw-print",
      +        "pen-line",
      +        "phone",
      +        "piggy-bank",
      +        "pill",
      +        "pizza",
      +        "plane",
      +        "puzzle",
      +        "receipt",
      +        "repeat",
      +        "rocket",
      +        "salad",
      +        "scale",
      +        "school",
      +        "shirt",
      +        "shopping-bag",
      +        "shopping-basket",
      +        "shopping-cart",
      +        "shower-head",
      +        "smile",
      +        "snowflake",
      +        "sofa",
      +        "sparkles",
      +        "sprout",
      +        "star",
      +        "stethoscope",
      +        "sun",
      +        "sunrise",
      +        "syringe",
      +        "target",
      +        "tent",
      +        "thermometer",
      +        "timer",
      +        "train-front",
      +        "tree-pine",
      +        "trophy",
      +        "umbrella",
      +        "users",
      +        "utensils",
      +        "wallet",
      +        "watch",
      +        "weight",
      +        "wine"
      +      ],
      +      "type": "string"
      +    },
      +    "journeys": {
      +      "description": "What the person does, step by step. Every step is proved by a test.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "description": "J-1, J-2, …",
      +            "type": "string"
      +          },
      +          "steps": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "id": {
      +                  "description": "J-1.1, J-1.2, … within journey J-1",
      +                  "type": "string"
      +                },
      +                "text": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "text"
      +              ],
      +              "type": "object"
      +            },
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "title",
      +          "steps"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "network": {
      +      "description": "The sites the app talks to, at most 5; every other site is blocked.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "site": {
      +            "description": "A bare website name, like api.open-meteo.com",
      +            "type": "string"
      +          },
      +          "why": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "site",
      +          "why"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "promises": {
      +      "description": "What always holds. Every promise is proved by a test.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "description": "P-1, P-2, …",
      +            "type": "string"
      +          },
      +          "kind": {
      +            "const": "data",
      +            "description": "\"data\" for a promise about saved data.",
      +            "type": "string"
      +          },
      +          "text": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "text"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "purpose": {
      +      "description": "What the app is for, in a sentence.",
      +      "type": "string"
      +    },
      +    "screens": {
      +      "description": "Each screen and what it shows.",
      +      "items": {
      +        "additionalProperties": false,
      +        "properties": {
      +          "id": {
      +            "type": "string"
      +          },
      +          "says": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "says"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "v": {
      +      "const": 1,
      +      "type": "number"
      +    }
      +  },
      +  "required": [
      +    "v",
      +    "purpose",
      +    "screens",
      +    "data",
      +    "journeys",
      +    "promises"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / tests
      Added value: +{
      +  "description": "The tests that prove every journey step and promise. Required.",
      +  "items": {
      +    "anyOf": [
      +      {
      +        "additionalProperties": false,
      +        "description": "Runs its steps on the app, opened fresh.",
      +        "properties": {
      +          "id": {
      +            "description": "T-1, T-2, …",
      +            "type": "string"
      +          },
      +          "kind": {
      +            "const": "behaviour",
      +            "type": "string"
      +          },
      +          "proves": {
      +            "description": "The journey step and promise ids this test proves.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "steps": {
      +            "items": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "description": "Finds what to tap by its text, label or role (and name): give at least one of text, label or role.",
      +                  "properties": {
      +                    "do": {
      +                      "const": "tap",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "role": {
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "type",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "label",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "select",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "label",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "reload",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "wait",
      +                      "type": "string"
      +                    },
      +                    "ms": {
      +                      "minimum": 0,
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "ms"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expect": {
      +                      "enum": [
      +                        "see",
      +                        "notSee"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "text"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expect": {
      +                      "enum": [
      +                        "checked",
      +                        "notChecked"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "label"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "equals": {
      +                      "minimum": 0,
      +                      "type": "integer"
      +                    },
      +                    "expect": {
      +                      "const": "count",
      +                      "type": "string"
      +                    },
      +                    "role": {
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "equals"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "equals": {
      +                      "type": "string"
      +                    },
      +                    "expect": {
      +                      "const": "value",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "label",
      +                    "equals"
      +                  ],
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "title",
      +          "proves",
      +          "steps"
      +        ],
      +        "type": "object"
      +      },
      +      {
      +        "additionalProperties": false,
      +        "description": "Proves saved data survives: setup, then check.",
      +        "properties": {
      +          "check": {
      +            "description": "After a reload, checks the data still shows. On an update these run in the new version.",
      +            "items": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "description": "Finds what to tap by its text, label or role (and name): give at least one of text, label or role.",
      +                  "properties": {
      +                    "do": {
      +                      "const": "tap",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "role": {
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "type",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "label",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "select",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "label",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "reload",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "wait",
      +                      "type": "string"
      +                    },
      +                    "ms": {
      +                      "minimum": 0,
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "ms"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expect": {
      +                      "enum": [
      +                        "see",
      +                        "notSee"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "text"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expect": {
      +                      "enum": [
      +                        "checked",
      +                        "notChecked"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "label"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "equals": {
      +                      "minimum": 0,
      +                      "type": "integer"
      +                    },
      +                    "expect": {
      +                      "const": "count",
      +                      "type": "string"
      +                    },
      +                    "role": {
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "equals"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "equals": {
      +                      "type": "string"
      +                    },
      +                    "expect": {
      +                      "const": "value",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "label",
      +                    "equals"
      +                  ],
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "id": {
      +            "description": "T-1, T-2, …",
      +            "type": "string"
      +          },
      +          "kind": {
      +            "const": "data",
      +            "type": "string"
      +          },
      +          "proves": {
      +            "description": "The promise ids about saved data this test proves.",
      +            "items": {
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "setup": {
      +            "description": "Saves data. On an update these run in the version before.",
      +            "items": {
      +              "anyOf": [
      +                {
      +                  "additionalProperties": false,
      +                  "description": "Finds what to tap by its text, label or role (and name): give at least one of text, label or role.",
      +                  "properties": {
      +                    "do": {
      +                      "const": "tap",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "name": {
      +                      "type": "string"
      +                    },
      +                    "role": {
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "type",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "label",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "select",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    },
      +                    "value": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "label",
      +                    "value"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "reload",
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "do"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "do": {
      +                      "const": "wait",
      +                      "type": "string"
      +                    },
      +                    "ms": {
      +                      "minimum": 0,
      +                      "type": "integer"
      +                    }
      +                  },
      +                  "required": [
      +                    "do",
      +                    "ms"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expect": {
      +                      "enum": [
      +                        "see",
      +                        "notSee"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "text"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "expect": {
      +                      "enum": [
      +                        "checked",
      +                        "notChecked"
      +                      ],
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "label"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "equals": {
      +                      "minimum": 0,
      +                      "type": "integer"
      +                    },
      +                    "expect": {
      +                      "const": "count",
      +                      "type": "string"
      +                    },
      +                    "role": {
      +                      "type": "string"
      +                    },
      +                    "text": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "equals"
      +                  ],
      +                  "type": "object"
      +                },
      +                {
      +                  "additionalProperties": false,
      +                  "properties": {
      +                    "equals": {
      +                      "type": "string"
      +                    },
      +                    "expect": {
      +                      "const": "value",
      +                      "type": "string"
      +                    },
      +                    "label": {
      +                      "type": "string"
      +                    }
      +                  },
      +                  "required": [
      +                    "expect",
      +                    "label",
      +                    "equals"
      +                  ],
      +                  "type": "object"
      +                }
      +              ]
      +            },
      +            "minItems": 1,
      +            "type": "array"
      +          },
      +          "title": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "id",
      +          "title",
      +          "proves",
      +          "kind",
      +          "setup",
      +          "check"
      +        ],
      +        "type": "object"
      +      }
      +    ]
      +  },
      +  "type": "array"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "app",
      -  "html"
      -]New value: +[
      +  "app",
      +  "html",
      +  "blueprint",
      +  "tests"
      +]
  2. Added

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare non-read-only, non-destructive, closed-world, so the bar is lower. The description still adds real behavioral context: the change is a whole-file replacement (not a partial patch), it propagates on next app open, and prior versions are retained so the update is reversible — consistent with destructiveHint=false.

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

Conciseness5/5

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

Three short sentences, front-loaded with the core action, then the propagation timing, then the completeness requirement and reversibility. No filler; every sentence carries information.

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 a complex tool with deeply nested schema and no output schema, the description covers what matters behaviorally (full replacement, propagation timing, undo). It stops short of stating return behavior or whether validation failures leave the app untouched, which would fully close the loop.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description reinforces that html, blueprint and tests must all be sent in full rather than the schema's per-field hints adding anything new, and it says nothing about the optional name or note parameters.

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 specific verb and resource — "Replaces an app's code with a new version" — so the agent knows this is a full-replacement update rather than a patch or a publish. It does not explicitly distinguish itself from siblings like publish_app or rollback_app, which is the only thing keeping it from a 5.

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

Usage Guidelines3/5

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

Usage is only implied: the mention that the phone picks up the new version on next open and that earlier versions are kept suggests an iterative edit-then-rollout flow, but the description never says when to choose this over publish_app or rollback_app, nor any preconditions (e.g. the app must already exist).

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.