Skip to main content
Glama

Add a plugin

add_plugin

Adds a plugin to a site (paid plans): kind and settings (list_plugins settings_help), or forms or form_html (kind forms). Forms and booking: the first call returns setup_summary; confirm_token saves it and returns snippet_html; then test_plugin.

Input Schema

NameRequiredDescriptionDefault
kindNo
langNoThe page's <html lang>, e.g. de (one snippet per language)
nameNoe.g. "Contact form"
siteYes
formsNoTyped: fields, success_message, redirect, submit_label, notify, store, auto_reply
settingsNoAs list_plugins settings_help
form_htmlNoForms: the page's <form>
confirm_tokenNo

Output Schema

NameRequiredDescriptionDefault
plugin_idNo
snippet_htmlNo
agent_messageNo
confirm_tokenNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • removedInput schema / properties / confirm_token / description
      Removed value: -"After the user's yes"
    • changedInput schema / properties / kind / enum
      Previous value: -[
      -  "forms",
      -  "booking"
      -]New value: +[
      +  "forms",
      +  "payments",
      +  "booking"
      +]
    • changedInput schema / properties / lang / description
      Previous value: -"The snippet page's <html lang>, e.g. de (one snippet per language)"New value: +"The page's <html lang>, e.g. de (one snippet per language)"
  2. Changed3 schema fields changed
    • changedInput schema / properties / lang / description
      Previous value: -"The <html lang> of the snippet's page (e.g. de); one snippet per language"New value: +"The snippet page's <html lang>, e.g. de (one snippet per language)"
    • removedInput schema / properties / site / description
      Removed value: -"Site name"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "agent_message": {
      +      "type": "string"
      +    },
      +    "confirm_token": {
      +      "type": "string"
      +    },
      +    "plugin_id": {
      +      "type": "string"
      +    },
      +    "snippet_html": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  3. Changed27 schema fields changed
    • changedInput schema / properties / confirm_token / description
      Previous value: -"From the first call, after the user's yes"New value: +"After the user's yes"
    • changedInput schema / properties / form_html / description
      Previous value: -"Forms: the page's <form>; declares the fields"New value: +"Forms: the page's <form>"
    • removedInput schema / properties / form_html / maxLength
      Removed value: -204800
    • removedInput schema / properties / forms / additionalProperties
      Removed value: -false
    • changedInput schema / properties / forms / description
      Previous value: -"Typed settings for a forms plugin (implies kind forms)"New value: +"Typed: fields, success_message, redirect, submit_label, notify, store, auto_reply"
    • removedInput schema / properties / forms / properties / auto_reply
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "message": {
      -      "type": "string"
      -    },
      -    "subject": {
      -      "type": "string"
      -    }
      -  },
      -  "required": [
      -    "message"
      -  ],
      -  "type": "object"
      -}
    • addedInput schema / properties / forms / properties / fields / description
      Added value: +"1-30 of: name, type, label, required, options, max_length, required_if {field, value}"
    • removedInput schema / properties / forms / properties / fields / items / additionalProperties
      Removed value: -false
    • removedInput schema / properties / forms / properties / fields / items / properties / label
      Removed value: -{
      -  "maxLength": 100,
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / forms / properties / fields / items / properties / max_length
      Removed value: -{
      -  "minimum": 1,
      -  "type": "integer"
      -}
    • removedInput schema / properties / forms / properties / fields / items / properties / options
      Removed value: -{
      -  "items": {
      -    "maxLength": 200,
      -    "minLength": 1,
      -    "type": "string"
      -  },
      -  "maxItems": 50,
      -  "minItems": 1,
      -  "type": "array"
      -}
    • removedInput schema / properties / forms / properties / fields / items / properties / required
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedInput schema / properties / forms / properties / fields / items / properties / required_if
      Removed value: -{
      -  "additionalProperties": false,
      -  "properties": {
      -    "field": {
      -      "type": "string"
      -    },
      -    "value": {
      -      "anyOf": [
      -        {
      -          "type": "string"
      -        },
      -        {
      -          "items": {
      -            "type": "string"
      -          },
      -          "type": "array"
      -        }
      -      ]
      -    }
      -  },
      -  "required": [
      -    "field",
      -    "value"
      -  ],
      -  "type": "object"
      -}
    • removedInput schema / properties / forms / properties / fields / maxItems
      Removed value: -30
    • removedInput schema / properties / forms / properties / fields / minItems
      Removed value: -1
    • removedInput schema / properties / forms / properties / notify
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedInput schema / properties / forms / properties / redirect
      Removed value: -{
      -  "maxLength": 300,
      -  "pattern": "^\\/(?![/\\\\])[^\\s\\\\]*$",
      -  "type": "string"
      -}
    • removedInput schema / properties / forms / properties / store
      Removed value: -{
      -  "type": "boolean"
      -}
    • removedInput schema / properties / forms / properties / submit_label
      Removed value: -{
      -  "maxLength": 40,
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / forms / properties / success_message
      Removed value: -{
      -  "maxLength": 300,
      -  "minLength": 1,
      -  "type": "string"
      -}
    • removedInput schema / properties / kind / description
      Removed value: -"Which plugin (forms is implied by forms)"
    • changedInput schema / properties / lang / description
      Previous value: -"The <html lang> of the page the snippet goes on (e.g. de): snippet_html then speaks it. One snippet per language on a multilingual site"New value: +"The <html lang> of the snippet's page (e.g. de); one snippet per language"
    • changedInput schema / properties / name / description
      Previous value: -"A name for the owner, e.g. \"Contact form\""New value: +"e.g. \"Contact form\""
    • removedInput schema / properties / settings / additionalProperties
      Removed value: -{}
    • changedInput schema / properties / settings / description
      Previous value: -"Shaped as list_plugins settings_help for the kind (booking too)"New value: +"As list_plugins settings_help"
    • changedInput schema / properties / site / description
      Previous value: -"Site name, e.g. brave-otter-4821"New value: +"Site name"
    • changedOutput schema / (root)
      Previous value: -{
      -  "additionalProperties": {},
      -  "properties": {
      -    "agent_message": {
      -      "type": "string"
      -    },
      -    "confirm_token": {
      -      "type": "string"
      -    },
      -    "error": {
      -      "description": "On failure (isError): {code, message}"
      -    }
      -  },
      -  "type": "object"
      -}New value: +null
  4. Changed4 schema fields changed
    • addedInput schema / properties / form_html
      Added value: +{
      +  "description": "Forms: the page's <form>; declares the fields",
      +  "maxLength": 204800,
      +  "type": "string"
      +}
    • addedInput schema / properties / forms / properties / auto_reply
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "message": {
      +      "type": "string"
      +    },
      +    "subject": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "message"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / forms / properties / fields / items / properties / required_if
      Added value: +{
      +  "additionalProperties": false,
      +  "properties": {
      +    "field": {
      +      "type": "string"
      +    },
      +    "value": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "items": {
      +            "type": "string"
      +          },
      +          "type": "array"
      +        }
      +      ]
      +    }
      +  },
      +  "required": [
      +    "field",
      +    "value"
      +  ],
      +  "type": "object"
      +}
    • changedInput schema / properties / forms / properties / fields / items / properties / type / enum
      Previous value: -[
      -  "text",
      -  "email",
      -  "tel",
      -  "textarea",
      -  "select",
      -  "checkbox",
      -  "date",
      -  "number",
      -  "url",
      -  "hidden"
      -]New value: +[
      +  "text",
      +  "email",
      +  "tel",
      +  "textarea",
      +  "select",
      +  "choices",
      +  "checkbox",
      +  "date",
      +  "time",
      +  "number",
      +  "url",
      +  "hidden"
      +]
  5. Changed1 schema field changed
    • addedInput schema / properties / lang
      Added value: +{
      +  "description": "The <html lang> of the page the snippet goes on (e.g. de): snippet_html then speaks it. One snippet per language on a multilingual site",
      +  "type": "string"
      +}
  6. Added

TDQS

A4/5.0
Behavior4/5

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

The annotations already declare this is a non-read-only, open-world, non-destructive, non-idempotent operation. The description adds meaningful behavior beyond annotations: the first call returns setup_summary, confirm_token is what saves the plugin, and snippet_html is returned after confirmation. It does not cover error cases, token expiry, or permissions beyond the paid-plan note.

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

Conciseness4/5

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

The description is compact and front-loads the core action and paid-plan scope. The parenthetical and semicolon-heavy phrasing is terse and slightly cryptic, but it packs substantial workflow information without wasted text.

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

Completeness4/5

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

For an 8-parameter mutation tool with nested objects and an output schema, the description covers the essential add-plugin workflow and confirmation behavior. It leaves some gaps around the payments kind and the relationship to update_plugin, but the schema and annotations carry much of the remaining detail.

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?

With 63% schema description coverage, the description compensates well for the most important gaps: it explains the kind/settings/forms/form_html branching and gives confirm_token special meaning. It still does not clarify lang, name, or the payments/booking-specific parameter expectations beyond the high-level workflow.

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?

The description clearly states the specific action and resource: 'Adds a plugin to a site (paid plans)'. It also signals variant behavior for settings versus forms/form_html, though it does not explicitly distinguish this tool from update_plugin or remove_plugin.

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

Usage Guidelines4/5

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

It gives useful usage context: paid plans, a reference to list_plugins settings_help for settings, the forms/form_html path when kind is forms, and the multi-step setup_summary/confirm_token/test_plugin flow. It lacks an explicit statement of when to use this instead of update_plugin, but the add-versus-update distinction is relatively clear.

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