Skip to main content
Glama

publish_app

Publishes a new app and returns its install link. Its code is checked first, and its tests run in a browser; a version is kept only if they pass. Password or card fields, and forms that send to other sites, are refused.

Input Schema

NameRequiredDescriptionDefault
htmlYesThe whole app, as one self-contained HTML file. At most 1 MB.
nameYesA short name for the home screen, like Habits.
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: -[
      -  "name",
      -  "html"
      -]New value: +[
      +  "name",
      +  "html",
      +  "blueprint",
      +  "tests"
      +]
  2. Added

TDQS

A4/5.0
Behavior5/5

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

Goes well beyond the annotations, which only say it is a non-destructive write. The description discloses the full validation pipeline (code check, browser-run tests), the versioning consequence (a version is kept only if tests pass), the content policy (password/card fields and cross-site forms refused), and that an install link comes back.

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 sentences, all load-bearing, with the core action and its return value front-loaded. No repetition of field names or restating of the title.

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 five-parameter tool with a deeply nested blueprint/tests schema, the description covers what the tool does and the main behavioral surprises. The gaps are what failure looks like (validation errors and whether anything is left behind) and how this relates to list_versions/rollback_app, which matters given there is no output schema.

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 name, html, blueprint and tests are already documented in place. The description adds only indirect meaning — that the supplied tests are actually executed and gate the published version — and says nothing about the blueprint structure or the optional note.

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 ("Publishes a new app") plus the immediate outcome ("returns its install link"). "New" implicitly separates it from update_app, but the sibling is never named, so an agent must infer the boundary between publishing and updating.

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 context is implied rather than stated: publishing is for a brand-new app, and the refusal rules (password/card fields, off-site forms) pre-empt some attempts. There is no explicit 'when not to use this' or 'use update_app instead' routing against the seven sibling tools.

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.