netlify-mcp (Python)
A Python port of the official Netlify MCP server, built to behave identically to the TypeScript original for the local stdio use case: same tool names, same input schemas, same response text.
This port targets the local stdio server only. Two things in the original are intentionally out of scope:
- The remote proxy deploy mode (
--proxy-path/ JWE flow), used when the MCP server runs behind Netlify's hosted remote endpoint. - The full remote OAuth/OIDC hosting server.
Everything else is ported: the user, team, project, deploy, and extension domain tool groups, the netlify-coding-rules context tool, and the Claude Design "Send to Netlify" import tools (import-claude-design-from-url, get-design-import-job-status).
Requirements
- Python 3.12+
- A Netlify account, authenticated via one of:
netlify login(using the Netlify CLI) — this server reads the sameconfig.jsonthe CLI writes.- The
NETLIFY_PERSONAL_ACCESS_TOKENenvironment variable, which overrides the CLI-managed token when set.
Install and run
uv sync
uv run netlify-mcp
Or, for one tool per operation instead of the grouped read/write selector tools:
uv run netlify-mcp --verbose
MCP client configuration
{
"mcpServers": {
"netlify": {
"command": "uv",
"args": ["run", "--directory", "/path/to/python-netlify-mcp", "netlify-mcp"]
}
}
}
Tools
By default, each domain exposes two selector tools: netlify-<domain>-services-reader (read-only operations) and netlify-<domain>-services-updater (write operations). Each selector takes a selectSchema of {operation, params} covering every operation listed below for that domain. Pass --verbose to instead register one tool per operation, named netlify-<domain>-<operation>.
user
| Operation | Read-only | Description |
|---|---|---|
get-user |
Yes | Get the current authenticated Netlify user's account details. |
team
| Operation | Read-only | Description |
|---|---|---|
get-teams |
Yes | List the Netlify teams (accounts) the user belongs to. |
get-team |
Yes | Get details for a specific Netlify team. |
project
| Operation | Read-only | Description |
|---|---|---|
get-project |
Yes | Get details for a specific Netlify project. |
get-projects |
Yes | List Netlify projects, optionally filtered by team or name. |
get-forms-for-project |
Yes | List (or fetch one) Netlify Forms form(s) configured for a project. |
update-visitor-access-controls |
No | Configure SSO or password-based visitor access control for a project. |
update-forms |
No | Enable or disable Netlify Forms processing for a project. |
manage-form-submissions |
No | Get or delete form submissions for a project. |
update-project-name |
No | Rename a Netlify project. |
manage-env-vars |
No | Get, create/update, or delete environment variables for a project. |
create-new-project |
No | Create a new Netlify project. |
deploy
| Operation | Read-only | Description |
|---|---|---|
get-deploy |
Yes | Get a deploy by id. |
get-deploy-for-site |
Yes | Get a specific deploy for a given project. |
deploy-site |
No | Zip up a local directory and deploy it to a Netlify project. |
extension
| Operation | Read-only | Description |
|---|---|---|
get-extensions |
Yes | List extensions available to any Netlify team. |
get-full-extension-details |
Yes | Get full details for a specific extension on a team. |
change-extension-installation |
No | Install or uninstall an extension for a team (and optionally a site). |
initialize-database |
No | Return setup instructions for the @netlify/database package. |
Standalone tools
These are registered individually, not as part of a domain's reader/updater selector, and are unaffected by --verbose.
| Tool | Read-only | Description |
|---|---|---|
netlify-coding-rules |
Yes | Context tool that must be called before writing any serverless or Netlify SDK/library code. |
import-claude-design-from-url |
No | Deploy a Claude Design export to Netlify as a new project ("Send to Netlify"). |
get-design-import-job-status |
Yes | Check the status of an in-progress Claude Design import deploy job. |
Configuration
Environment variables (see .env.example):
| Variable | Description |
|---|---|
NETLIFY_PERSONAL_ACCESS_TOKEN |
Optional. Skips the CLI-managed token lookup when set. |
LOG_LEVEL |
Logging level (default INFO). |
Development
uv sync --group dev
uv run pytest
uv run ruff check .
uv run mypy src
Metadata
Release files for netlify-mcp 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| netlify_mcp-1.0.0.tar.gz | 32.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| netlify_mcp-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 84.7 kB
Release files / netlify_mcp-1.0.0.tar.gz
| Download URL | netlify_mcp-1.0.0.tar.gz |
|---|---|
| Size | 32.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d2013d7a6624d21fa6f8531c94770a013423f8790c9290be54ac0d3beaf9f11b
|
|
BLAKE2b-256 checksum How to use checksums |
40c1bb1646855cc40e982550cc4c06259a68ed2b128e671cd4a13c2ab3bef927
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.
Transparency logRelease files / netlify_mcp-1.0.0-py3-none-any.whl
| Download URL | netlify_mcp-1.0.0-py3-none-any.whl |
|---|---|
| Size | 52.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
24ce309b01937c40bef80f1ca14337996d6ad01883ad47aa81b0f130a2bd03f5
|
|
BLAKE2b-256 checksum How to use checksums |
c4bb1ea9147415fd77d5a8c15451da37f7e630cf1003c5ea8058ea7f0692238a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 17, 2026.
Transparency log