Atlas / MCP servers / netlify / Netlify

NetlifyBLOCK

mcp/netlify/netlify-3

Netlify's Official MCP server

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
3 3r · 0w · 0d
Transport
streamable-http
License
—
Stars
67
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

Netlify MCP Server follows the Model Context Protocol (MCP) to enable code agents to use the Netlify API and CLI—so they can create new projects, build, deploy, and manage your Netlify resources using natural language prompts.

Overview

The Model Context Protocol is an emerging standard protocol for connecting code agents with MCP servers, allowing them to manage resources and perform tasks using natural language. The Netlify MCP Server acts as a bridge, providing API access, CLI tools, prompts, and more for your agents.

You can connect to the Netlify MCP Server using a variety of MCP clients, including:

Use Cases

With Netlify MCP Server, your AI agents can:

  • Create, manage, and deploy Netlify projects
  • Modify access controls for enhanced project security
  • Install or uninstall Netlify extensions
  • Fetch user and team information
  • Enable and manage form submissions
  • Create and manage environment variables and secrets
  • and more...

Prerequisites

  • Node.js 22 or higher

Check with node --version

  • A Netlify account
  • An MCP client (e.g., Windsurf, Cursor, Claude, Copilot)
Tip: Install the Netlify CLI globally for the best experience: npm install -g netlify-cli

MCP Configuration

For the production MCP server, use the following configuration:

Editors with one-click install:

[](https://cursor.com/install-mcp?name=netlify&config=eyJjb21tYW5kIjoibnB4IC15IEBuZXRsaWZ5L21jcCJ9)

[](https://lmstudio.ai/install-mcp?name=netlify&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIt

Read from source at commit 87402cb383a7OBSERVED · 2026-10-08
Advertisement
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code
claude mcp add mcp --env CLIENT_SECRET_AZURE_AI_FOUNDRY=${CLIENT_SECRET_AZURE_AI_FOUNDRY} --env CLIENT_SECRET_AZURE_AI_FOUNDRY_TESTING=${CLIENT_SECRET_AZURE_AI_FOUNDRY_TESTING} --env EVENTS_RELAY_JWE_SECRET=${EVENTS_RELAY_JWE_SECRET} --env JWE_SECRET=${JWE_SECRET} -- npx -y @netlify/[email protected]
claude-desktop
{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "-y",
        "@netlify/[email protected]"
      ],
      "env": {
        "CLIENT_SECRET_AZURE_AI_FOUNDRY": "${CLIENT_SECRET_AZURE_AI_FOUNDRY}",
        "CLIENT_SECRET_AZURE_AI_FOUNDRY_TESTING": "${CLIENT_SECRET_AZURE_AI_FOUNDRY_TESTING}",
        "EVENTS_RELAY_JWE_SECRET": "${EVENTS_RELAY_JWE_SECRET}",
        "JWE_SECRET": "${JWE_SECRET}"
      }
    }
  }
}
03

Exposed tools (3)

3 read · 0 write · 0 destructive.

ToolRiskDescription
get-netlify-coding-contextreadALWAYS call when writing code. Required step before creating or editing any type of functions, Netlify sdk/library usage, etc. Use other operations for project management.
needs-authread
netlify-coding-rulesreadALWAYS call when writing serverless or Netlify code. required step before creating or editing any type of functions, Netlify sdk/library usage, etc.
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryFAIL
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (3 observation(s))
Network
declared (3 observation(s))
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (20)

HIGHInventory / provenance · inv.suspicious_name · CWE-1104
netlify/functions/mcp-server/events/project-payload.ts
project-payload.ts
Why it matters. member named after an attack tool
Fix. remove or justify
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/utils/cmd.ts:18
const childProcess = exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInventory / provenance · inv.hidden_file · CWE-1104
.release-please-manifest.json
.release-please-manifest.json
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.no_license · CWE-1104
Why it matters. no LICENSE file and no repo licence
Fix. add a licence
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
netlify/functions/mcp-server/coding-context-tool.test.ts:12
const { SKILLS_HOST, resetCodingContextCachesForTests } = await import('../../../src/context/coding-context.ts');
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
netlify/functions/mcp-server/events-subscription.test.ts:134
assert.equal(parseRelayPath(`/events/relay/${subId}/../../etc/passwd`), null);
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
netlify/functions/mcp-server/events/hooks-api.ts:7
import { authenticatedFetch, getAPIJSONResult, getTokenIdentity, NetlifyApiError } from '../../../../src/utils/api-networking.ts';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
netlify/functions/mcp-server/proxy.test.ts:3
import { handleProxy } from '../../edge-functions/proxy.ts';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
netlify/functions/mcp.ts:7
import { registerCodingContextTool } from "../../src/context/register-coding-context-tool.ts";
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
netlify/functions/mcp-server/events-guard.test.ts:12
'169.254.169.254',              // cloud metadata — the classic SSRF target
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
netlify/functions/mcp-server/events-guard.test.ts:34
'::ffff:a9fe:a9fe', // 169.254.169.254, the cloud metadata address
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
netlify/functions/mcp-server/events-guard.test.ts:78
'https://169.254.169.254/latest/meta-data',
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
netlify/functions/mcp-server/events-guard.test.ts:83
'https://[::ffff:169.254.169.254]/latest/meta-data',
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.metadata_ip · CWE-200, CWE-319
src/tools/design-import/url-guard.test.ts:28
'169.254.169.254',                // cloud metadata
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
netlify/functions/mcp-server/auth-flow.test.ts:52
redirect_uris: ['http://127.0.0.1:1234/cb'],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
netlify/functions/mcp-server/auth-flow.test.ts:65
redirect_uris: ['http://127.0.0.1:1234/cb'],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
netlify/functions/mcp-server/auth-flow.test.ts:82
redirect_uris: ['http://127.0.0.1:1234/cb'],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
netlify/functions/mcp-server/auth-flow.test.ts:90
const loopbackUri = 'http://127.0.0.1:4321/cb';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
netlify/functions/mcp-server/auth-flow.test.ts:125
redirect_uris: ['http://127.0.0.1:1234/cb'],
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@netlify/edge-functions, @netlify/functions, archiver, env-paths, fetch-to-node, jose, zod, zod-to-json-schema
Why it matters. 13 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass, no_license.

Audited 2026-10-08 · audit v0.4.1 · source sha 87402cb383a7full audit observations/trust-audit/mcp-server/netlify__netlify-3.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0887402cb383a7BLOCKD69first audit
06

Questions

What is the Netlify MCP server?

Netlify's Official MCP server

What tools does Netlify expose?

3 in total: 3 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Netlify safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 2 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What credentials does Netlify need?

It reads CLIENT_SECRET_AZURE_AI_FOUNDRY, CLIENT_SECRET_AZURE_AI_FOUNDRY_TESTING, EVENTS_RELAY_JWE_SECRET, JWE_SECRET, NETLIFY_PERSONAL_ACCESS_TOKEN, NTL_AUTH_CLIENT_ID and OAUTH_ISSUER from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does Netlify run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @netlify/mcp at 1.18.0.

How current is this page?

The grade is for one exact copy of the source (87402cb383a7), read on 2026-10-08. The repository is watched and re-audited when it changes.

Advertisement