Skip to main content
Glama
netlify

Netlify MCP Server

Official
by netlify

netlify-project-services-updater

Destructive

Select and run Netlify write operations to update visitor access controls, forms, form submissions, project names, environment variables, or create a new project.

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.8/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, openWorldHint=true, idempotentHint=false and readOnlyHint=false, so the safety profile is covered. The description adds nothing beyond 'write operations' — it does not say what gets destroyed (e.g., delete-submission), what auth is required, or any rate/scope constraints, so it is largely redundant with the annotations rather than additive.

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

Conciseness3/5

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

One sentence, front-loaded with the action, and the operation list is necessary to expose the discriminator. The comma-spliced enumeration reads awkwardly and could have been formatted, but there is no wasted prose.

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

Completeness2/5

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

For a mega-tool wrapping six destructive write operations behind a complex nested union with no output schema, the description is thin: it omits what each operation does, the wrapper fields, and any safety guidance. The annotations carry the destructive signal, but the agent still lacks enough context to select and configure an operation confidently.

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

Parameters2/5

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

The single top-level parameter 'selectSchema' is a large anyOf union with 0% description coverage, and the description never explains the {operation, params, aiAgentName, llmModelName} wrapper. Listing the operation names does map to the discriminator const values, but the params structure, defaults, and nested fields are left entirely to the schema.

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+resource ('run one of the following Netlify write operations') and enumerates the six supported operations, which lets an agent map intent to a discriminator value. It implicitly contrasts with the sibling readers via 'write operations' but never names netlify-project-services-reader explicitly.

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?

The operation list functions as a weak selection guide, telling the agent which writes are available. However there is no when-to-use versus the reader sibling, no prerequisites (API token/auth), and no warning about which operations are destructive/irreversible.

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