B

Netlify MCP Server

Official Netlify MCP server for managing projects, deploys, teams, extensions, and env vars

Overall Score74/100

Score Breakdown

Server Info

Package
@netlify/mcp
Registry
npm
Maintainer
NetlifyVendor
Category
Cloud & Infrastructure
Tags
hostingdeploymentjamstack
Last Scanned
7 Apr 2026

Findings

9 issues

Authentication & Identity

LOWImplements MCP OAuth spec for per-user authentication

Dual transport: stdio (local) and StreamableHTTP (remote via Netlify Functions). Local mode reads Netlify CLI config for auth token or falls back to NETLIFY_PERSONAL_ACCESS_TOKEN env var; can also trigger 'netlify login' interactively. Remote mode has a full OAuth flow implemented in netlify/functions/ with OIDC provider, JWE token encryption (jose library), and a proxy edge function. Remote MCP expects Bearer token in Authorization header, which can be a Netlify access token (nfu/nfp/nfo prefix) or a JWE-encrypted token. The remote deployment also filters tools differently (omitFromRemoteMCP/omitFromLocalMCP flags).

Remediation

Document the required OAuth scopes for each tool.

Tool Schema Quality

HIGHRequired fields missing on 3 write operations

Write tools without required field declarations: deploy-site, create-new-project, initialize-database.

Remediation

Add required arrays to all write/delete tool schemas.

Permission Granularity

MEDIUM1 tools combine read and write operations

Tools are categorized by readOnlyHint annotation into read and write groups. They are registered as grouped domain tools (e.g., netlify-project-services-reader, netlify-project-services-updater) which bundles multiple operations under a single tool name with a selector schema. manage-form-submissions is mixed (get-submissions reads, delete-submission writes). There are no explicit admin/destructive tools. No project deletion tool exists. In grouped mode, descriptions are auto-generated and generic (e.g., 'Select and run one of the following Netlify read operations'). In verbose mode (--verbose flag), each tool is registered individually with slightly more specific descriptions.

Remediation

Split into separate read and write tools.

LOWTool descriptions lack resource scope

Descriptions don't specify what data types or resources they access.

Remediation

Add resource type statements to descriptions.

LLM Safety

MEDIUM4 tool descriptions are too vague

Short or generic descriptions make tool selection unreliable.

Remediation

Expand descriptions with specific actions, data types, and side effects.

HIGHTool descriptions contain instructional language

Descriptions include directives that could influence LLM behavior beyond tool selection.

Remediation

Remove instructional language. Descriptions should be purely factual.

Data Exposure

MEDIUM3 list operations lack pagination

get-projects uses API-level pagination (page/page_size up to 100 pages, with 22s timeout). manage-form-submissions has limit/offset parameters. When >20 sites returned, get-projects automatically reduces response to essential fields (id, name, url, teamId). get-teams, get-extensions, get-forms-for-project have no pagination. Full records returned otherwise.

Remediation

Add limit/offset or cursor-based pagination.

LOWNo field selection on responses

Responses return full records rather than projected fields.

Remediation

Implement field selection to return only relevant fields.

Maintenance & Trust

MEDIUM14 dependency vulnerabilities (9 high)

npm audit found 9 high severity CVEs.

Remediation

Update vulnerable dependencies.

Tools

20 total
NameDescriptionRisk
netlify-coding-rulesALWAYS call when writing serverless or Netlify code. required step before creating or editing any type of functions, Netlify sdk/library usage, etc.read
get-userget-user operation for Netlify user (read-only)read
get-teamsget-teams operation for Netlify team (read-only)read
get-teamget-team operation for Netlify team (read-only)read
get-projectget-project operation for Netlify project (read-only)read
get-projectsget-projects operation for Netlify project (read-only)read
get-forms-for-projectget-forms-for-project operation for Netlify project (read-only)read
get-deployget-deploy operation for Netlify deploy (read-only)read
get-deploy-for-siteget-deploy-for-site operation for Netlify deploy (read-only)read
get-extensionsget-extensions operation for Netlify extension (read-only)read
get-full-extension-detailsget-full-extension-details operation for Netlify extension (read-only)read
deploy-sitedeploy-site operation for Netlify deploywrite
create-new-projectcreate-new-project operation for Netlify projectwrite
update-project-nameupdate-project-name operation for Netlify projectwrite
update-visitor-access-controlsupdate-visitor-access-controls operation for Netlify projectwrite
update-formsupdate-forms operation for Netlify projectwrite
manage-form-submissionsmanage-form-submissions operation for Netlify projectwrite
manage-env-varsmanage-env-vars operation for Netlify projectwrite
change-extension-installationchange-extension-installation operation for Netlify extensionwrite
initialize-databaseinitialize-database operation for Netlify extensionwrite

Deploy Netlify MCP Server securely

CompleteFlow adds per-user authentication, permission scoping, and audit logging to any MCP server out of the box.

Deploy on CompleteFlow