Skip to main content
Glama
netlify

Netlify MCP Server

Official
by netlify

netlify-project-services-updater

Modify Netlify project services: update visitor access, forms, env vars, and project names; manage form submissions; or create new projects.

Instructions

Select and run one of the following Netlify write operations update-visitor-access-controls, update-forms, manage-form-submissions, update-project-name, manage-env-vars, create-new-project

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
selectSchemaYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changedv1.0.1
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • changedInput schema / properties / selectSchema / anyOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aiAgentName": {
      -        "type": "string"
      -      },
      -      "llmModelName": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "const": "update-visitor-access-controls",
      -        "type": "string"
      -      },
      -      "params": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "appliesTo": {
      -            "description": "Which project context this rule applies to",
      -            "enum": [
      -              "all-projects",
      -              "non-production-projects"
      -            ],
      -            "type": "string"
      -          },
      -          "passwordValue": {
      -            "type": "string"
      -          },
      -          "requirePassword": {
      -            "type": "boolean"
      -          },
      -          "requireSSOTeamLogin": {
      -            "type": "boolean"
      -          },
      -          "siteId": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "siteId",
      -          "appliesTo"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "operation"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aiAgentName": {
      -        "type": "string"
      -      },
      -      "llmModelName": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "const": "update-forms",
      -        "type": "string"
      -      },
      -      "params": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "forms": {
      -            "enum": [
      -              "enabled",
      -              "disabled"
      -            ],
      -            "type": "string"
      -          },
      -          "siteId": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "siteId"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "operation"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aiAgentName": {
      -        "type": "string"
      -      },
      -      "llmModelName": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "const": "manage-form-submissions",
      -        "type": "string"
      -      },
      -      "params": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "action": {
      -            "enum": [
      -              "get-submissions",
      -              "delete-submission"
      -            ],
      -            "type": "string"
      -          },
      -          "formId": {
      -            "type": "string"
      -          },
      -          "limit": {
      -            "default": 20,
      -            "type": "number"
      -          },
      -          "offset": {
      -            "default": 0,
      -            "type": "number"
      -          },
      -          "siteId": {
      -            "type": "string"
      -          },
      -          "submissionId": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "action"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "operation"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aiAgentName": {
      -        "type": "string"
      -      },
      -      "llmModelName": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "const": "update-project-name",
      -        "type": "string"
      -      },
      -      "params": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "name": {
      -            "description": "Name must be hyphenated alphanumeric such as \"my-site\" or \"my-site-2\"",
      -            "pattern": "^[a-z0-9-]+$",
      -            "type": "string"
      -          },
      -          "siteId": {
      -            "type": "string"
      -          }
      -        },
      -        "required": [
      -          "siteId",
      -          "name"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "operation"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aiAgentName": {
      -        "type": "string"
      -      },
      -      "llmModelName": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "const": "manage-env-vars",
      -        "type": "string"
      -      },
      -      "params": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "deleteEnvVar": {
      -            "type": "boolean"
      -          },
      -          "envVarIsSecret": {
      -            "type": "boolean"
      -          },
      -          "envVarKey": {
      -            "type": "string"
      -          },
      -          "envVarValue": {
      -            "type": "string"
      -          },
      -          "getAllEnvVars": {
      -            "type": "boolean"
      -          },
      -          "newVarContext": {
      -            "default": "all",
      -            "enum": [
      -              "all",
      -              "dev",
      -              "branch-deploy",
      -              "deploy-preview",
      -              "production",
      -              "branch"
      -            ],
      -            "type": "string"
      -          },
      -          "newVarScopes": {
      -            "default": [
      -              "all"
      -            ],
      -            "items": {
      -              "enum": [
      -                "all",
      -                "builds",
      -                "functions",
      -                "runtime",
      -                "post_processing"
      -              ],
      -              "type": "string"
      -            },
      -            "type": "array"
      -          },
      -          "siteId": {
      -            "type": "string"
      -          },
      -          "upsertEnvVar": {
      -            "type": "boolean"
      -          }
      -        },
      -        "required": [
      -          "siteId"
      -        ],
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "operation"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "aiAgentName": {
      -        "type": "string"
      -      },
      -      "llmModelName": {
      -        "type": "string"
      -      },
      -      "operation": {
      -        "const": "create-new-project",
      -        "type": "string"
      -      },
      -      "params": {
      -        "additionalProperties": false,
      -        "properties": {
      -          "name": {
      -            "description": "Name must be hyphenated alphanumeric such as \"my-site\" or \"my-site-2\"",
      -            "pattern": "^[a-z0-9-]+$",
      -            "type": "string"
      -          },
      -          "teamSlug": {
      -            "type": "string"
      -          }
      -        },
      -        "type": "object"
      -      }
      -    },
      -    "required": [
      -      "operation"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "properties": {
      +      "aiAgentName": {
      +        "type": "string"
      +      },
      +      "llmModelName": {
      +        "type": "string"
      +      },
      +      "operation": {
      +        "const": "update-visitor-access-controls",
      +        "type": "string"
      +      },
      +      "params": {
      +        "properties": {
      +          "appliesTo": {
      +            "description": "Which project context this rule applies to",
      +            "enum": [
      +              "all-projects",
      +              "non-production-projects"
      +            ],
      +            "type": "string"
      +          },
      +          "passwordValue": {
      +            "type": "string"
      +          },
      +          "requirePassword": {
      +            "type": "boolean"
      +          },
      +          "requireSSOTeamLogin": {
      +            "type": "boolean"
      +          },
      +          "siteId": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "siteId",
      +          "appliesTo"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "operation"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "aiAgentName": {
      +        "type": "string"
      +      },
      +      "llmModelName": {
      +        "type": "string"
      +      },
      +      "operation": {
      +        "const": "update-forms",
      +        "type": "string"
      +      },
      +      "params": {
      +        "properties": {
      +          "forms": {
      +            "enum": [
      +              "enabled",
      +              "disabled"
      +            ],
      +            "type": "string"
      +          },
      +          "siteId": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "siteId"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "operation"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "aiAgentName": {
      +        "type": "string"
      +      },
      +      "llmModelName": {
      +        "type": "string"
      +      },
      +      "operation": {
      +        "const": "manage-form-submissions",
      +        "type": "string"
      +      },
      +      "params": {
      +        "properties": {
      +          "action": {
      +            "enum": [
      +              "get-submissions",
      +              "delete-submission"
      +            ],
      +            "type": "string"
      +          },
      +          "formId": {
      +            "type": "string"
      +          },
      +          "limit": {
      +            "default": 20,
      +            "type": "number"
      +          },
      +          "offset": {
      +            "default": 0,
      +            "type": "number"
      +          },
      +          "siteId": {
      +            "type": "string"
      +          },
      +          "submissionId": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "action"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "operation"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "aiAgentName": {
      +        "type": "string"
      +      },
      +      "llmModelName": {
      +        "type": "string"
      +      },
      +      "operation": {
      +        "const": "update-project-name",
      +        "type": "string"
      +      },
      +      "params": {
      +        "properties": {
      +          "name": {
      +            "description": "Name must be hyphenated alphanumeric such as \"my-site\" or \"my-site-2\"",
      +            "pattern": "^[a-z0-9-]+$",
      +            "type": "string"
      +          },
      +          "siteId": {
      +            "type": "string"
      +          }
      +        },
      +        "required": [
      +          "siteId",
      +          "name"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "operation"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "aiAgentName": {
      +        "type": "string"
      +      },
      +      "llmModelName": {
      +        "type": "string"
      +      },
      +      "operation": {
      +        "const": "manage-env-vars",
      +        "type": "string"
      +      },
      +      "params": {
      +        "properties": {
      +          "deleteEnvVar": {
      +            "type": "boolean"
      +          },
      +          "envVarIsSecret": {
      +            "type": "boolean"
      +          },
      +          "envVarKey": {
      +            "type": "string"
      +          },
      +          "envVarValue": {
      +            "type": "string"
      +          },
      +          "getAllEnvVars": {
      +            "type": "boolean"
      +          },
      +          "newVarContext": {
      +            "default": "all",
      +            "enum": [
      +              "all",
      +              "dev",
      +              "branch-deploy",
      +              "deploy-preview",
      +              "production",
      +              "branch"
      +            ],
      +            "type": "string"
      +          },
      +          "newVarScopes": {
      +            "default": [
      +              "all"
      +            ],
      +            "items": {
      +              "enum": [
      +                "all",
      +                "builds",
      +                "functions",
      +                "runtime",
      +                "post_processing"
      +              ],
      +              "type": "string"
      +            },
      +            "type": "array"
      +          },
      +          "siteId": {
      +            "type": "string"
      +          },
      +          "upsertEnvVar": {
      +            "type": "boolean"
      +          }
      +        },
      +        "required": [
      +          "siteId"
      +        ],
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "operation"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "properties": {
      +      "aiAgentName": {
      +        "type": "string"
      +      },
      +      "llmModelName": {
      +        "type": "string"
      +      },
      +      "operation": {
      +        "const": "create-new-project",
      +        "type": "string"
      +      },
      +      "params": {
      +        "properties": {
      +          "name": {
      +            "description": "Name must be hyphenated alphanumeric such as \"my-site\" or \"my-site-2\"",
      +            "pattern": "^[a-z0-9-]+$",
      +            "type": "string"
      +          },
      +          "teamSlug": {
      +            "type": "string"
      +          }
      +        },
      +        "type": "object"
      +      }
      +    },
      +    "required": [
      +      "operation"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Addedv1.0.0

TDQS

C2.3/5.0
Behavior2/5

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

Annotations indicate readOnlyHint=false, and the description repeats that these are write operations, but it adds no further behavioral detail. It does not disclose that operations like manage-form-submissions can delete submissions, or that changes may be irreversible, or any permission requirements. Since annotations are sparse, the description should carry more weight, but it only lists operation names without explaining consequences or side effects.

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

Conciseness2/5

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

The description is a single sentence, which is concise, but it is essentially a comma-separated list of operation names. It is not appropriately sized for the tool's complexity; it omits essential structural guidance and fails to earn its place by providing actionable information. The front-loading of 'Select and run' is fine, but the lack of any branching logic or parameter hints makes it insufficient.

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

Completeness1/5

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

This tool has a highly complex input schema with six different operations, each with distinct parameters and some with enums and defaults. The description provides only a list of operation names, with no instructions on how to choose an operation, what parameters are needed, or any behavioral expectations. There is also no output schema. This is profoundly incomplete for a tool of this complexity.

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

Parameters1/5

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

The description merely lists operation names but gives no explanation of how to use the selectSchema parameter, which is a complex union of six distinct object schemas. It provides no mapping from operation to required parameters, and the schema has many fields without descriptions (e.g., siteId, envVarKey, etc.). With 0% schema description coverage, the description was expected to compensate, but it does not – it leaves an agent completely uninformed about how to construct a valid request.

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 uses the verb phrase 'Select and run' and identifies the resource as Netlify write operations, listing six specific operations (update-visitor-access-controls, update-forms, etc.). This gives a clear sense of what the tool does. However, it does not differentiate this tool from sibling tools like netlify-deploy-services-updater, which also handle updates, so it lacks sibling-specific clarity.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool over alternatives. It does not mention the related reader tools or the deploy-services-updater, nor does it explain under what circumstances an agent should choose this dispatcher. There is no 'when to use' or 'when not to use' advice, leaving the agent to infer usage from the operation names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.