netlify_cancel_ deployCancel a deploy that is still building or uploading.
Publish files as a preview or to the live site, put back the last good deploy, find out why a build failed, set an environment variable and read new form submissions, all on the team you connect.
PopMCPNetlify
Every operation in Netlify's public API a team member's token can call, from sites, deploys and builds to forms, DNS, split tests, add-ons, databases and agent runs, with the everyday tools loaded by default and the rest one search away.
171 tools in the full catalog: 76 read and 95 write. 35 load by default, and the rest are found with tool search.
netlify_cancel_ deployCancel a deploy that is still building or uploading.
netlify_deploy_ filesPublish files to a Netlify site in one call: give each file's path and content (text, or base64 for images and other binary files).
netlify_get_ deployGet a deploy.
netlify_list_ site_ deploysList a site's deploys.
netlify_lock_ deployLock a deploy: it stays (or becomes) the published deploy, and later deploys still build but are not published until netlify_unlock_deploy (stops auto publishing).
netlify_restore_ deployPublish an earlier deploy of a site (roll back to that exact deploy).
netlify_rollback_ siteRoll the production site back to the deploy before the current one.
netlify_unlock_ deployUnlock a locked deploy so new deploys publish automatically again.
netlify_wait_ for_ deployWait until a deploy finishes (ready, error or rejected), checking every few seconds for up to timeout_seconds (default 40, max 50).
netlify_create_ dns_ recordCreate a DNS record.
netlify_delete_ dns_ recordDelete a DNS record.
netlify_list_ dns_ recordsList a DNS zone's records.
netlify_list_ dns_ zonesList the connected team's DNS zones (domains whose DNS Netlify hosts).
netlify_create_ siteCreate a site in the connected team.
netlify_delete_ env_ varDelete an environment variable.
netlify_get_ siteGet one site: name, urls, custom domain and aliases, the published deploy, build settings and the linked repository.
netlify_list_ site_ env_ varsList a site's environment variables.
netlify_list_ sitesList the connected team's sites (Netlify now calls sites projects).
netlify_reveal_ secretShow a secret value that other Netlify tools hide: an environment variable's values (kind env_var, with key and usually site_id), a site database connection string (kind database, or database_branch with branch_id), or an AI Gateway token.
netlify_set_ env_ varCreate or update ONE environment variable, the right Netlify call either way.
netlify_site_ overviewEverything about one site in one call: its name, URLs, custom domain, linked repository and build settings, the published deploy, the latest deploys (state, branch, time, error) and its forms with submission counts.
netlify_update_ siteUpdate a site.
netlify_create_ notification_ hookCreate an outgoing hook.
netlify_list_ notification_ hooksList a site's outgoing hooks.
netlify_delete_ submissionDelete a form submission.
netlify_list_ form_ submissionsList a form's submissions.
netlify_list_ site_ submissionsList a site's form submissions.
netlify_create_ site_ build_ hookCreate a build hook.
netlify_list_ site_ build_ hooksList a site's build hooks.
netlify_list_ team_ membersList a team's members.
netlify_start_ site_ buildStart a build of the site from its linked repository (the same as Trigger deploy in the Netlify UI).
netlify_provision_ site_ tls_ certificateProvision or update a site's TLS certificate.
netlify_list_ site_ formsList a site's forms.
netlify_list_ site_ functionsSearch a site's functions.
netlify_purge_ cachePurge Netlify's CDN cache for a site: everything, or only the responses tagged with cache_tags (Cache-Tag headers).
netlify_clear_ site_ database_ compute_ settingsReset database compute settings to defaults.
netlify_create_ site_ databaseCreate a site database.
netlify_create_ site_ database_ branchCreate a database branch.
netlify_create_ site_ database_ snapshotCreate a database snapshot.
netlify_delete_ site_ databaseDelete a site database.
netlify_delete_ site_ database_ branchDelete a database branch.
netlify_delete_ site_ database_ snapshotDelete a database snapshot.
netlify_get_ site_ databaseGet the site's Netlify Database.
netlify_get_ site_ database_ branchGet one database branch.
netlify_get_ site_ database_ compute_ settingsGet database compute settings.
netlify_get_ site_ database_ migrationGet a database migration.
netlify_list_ site_ database_ branchesList database branches.
netlify_list_ site_ database_ migrationsList database migrations.
netlify_list_ site_ database_ snapshotsList database snapshots.
netlify_reset_ site_ database_ branchReset a database branch.
netlify_restore_ site_ database_ snapshotRestore a database snapshot.
netlify_run_ site_ database_ migrationsRun database migrations for a deploy.
netlify_set_ site_ database_ branch_ compute_ settingsSet a database branch's compute settings.
netlify_set_ site_ database_ compute_ settingsSet database compute settings.
netlify_answer_ agent_ run_ sessionAnswer an agent run session's pending interaction.
netlify_archive_ agent_ runArchive an agent run.
netlify_delete_ agent_ runSame as netlify_stop_agent_run (Netlify's alias): stops the run's active session.
netlify_delete_ agent_ run_ sessionSame as netlify_stop_agent_run_session (Netlify's alias): stops the session.
netlify_get_ agent_ runGet an agent run.
netlify_get_ agent_ run_ diffGet an agent run's diff.
netlify_get_ agent_ run_ sessionGet an agent run session.
netlify_list_ agent_ run_ sessionsList an agent run's sessions.
netlify_list_ agent_ runsList a site's agent runs.
netlify_start_ agent_ runStart an agent run.
netlify_start_ agent_ run_ sessionStart a follow-up agent run session.
netlify_start_ site_ agent_ runStart an agent run on a site.
netlify_stop_ agent_ runStop an agent run.
netlify_stop_ agent_ run_ sessionStop an agent run session.
netlify_update_ agent_ runUpdate an agent run.
netlify_update_ agent_ run_ sessionUpdate an agent run session.
netlify_create_ site_ deployCreate a deploy.
netlify_delete_ deployDelete a deploy.
netlify_delete_ site_ deployDelete a site's deploy.
netlify_get_ site_ deployGet a site's deploy.
netlify_list_ site_ deployed_ branchesList a site's deployed branches.
netlify_update_ site_ deployUpdate a deploy.
netlify_configure_ site_ dnsConfigure a site's DNS.
netlify_create_ dns_ zoneCreate a DNS zone.
netlify_delete_ dns_ zoneDelete a DNS zone.
netlify_get_ dns_ recordGet a DNS record.
netlify_get_ dns_ zoneGet a DNS zone.
netlify_get_ site_ dnsGet the DNS zones serving a site's custom domains, with their records and Netlify name servers.
netlify_transfer_ dns_ zoneTransfer a DNS zone to another team.
netlify_create_ env_ varsCreate environment variables.
netlify_delete_ env_ var_ valueDelete an environment variable value.
netlify_delete_ siteDelete a site with all its deploys, forms and settings.
netlify_disable_ siteDisable a site.
netlify_enable_ siteEnable a site.
netlify_get_ env_ varGet one environment variable by key: scopes, is_secret and its values per context.
netlify_list_ accessible_ sitesList every site this login can open, filtered to the connected team.
netlify_list_ env_ varsList environment variables.
netlify_set_ env_ var_ valueSet a value on an environment variable.
netlify_unlink_ site_ repoUnlink a site's repository.
netlify_update_ env_ varUpdate an environment variable.
netlify_create_ site_ addonCreate an add-on instance.
netlify_delete_ site_ addonDelete an add-on instance.
netlify_get_ addon_ serviceGet an add-on service.
netlify_get_ addon_ service_ manifestGet an add-on service's manifest.
netlify_get_ site_ addonGet an add-on instance.
netlify_list_ addon_ servicesList add-on services.
netlify_list_ site_ addonsList a site's add-on instances.
netlify_update_ site_ addonUpdate an add-on instance.
netlify_delete_ notification_ hookDelete an outgoing hook.
netlify_enable_ notification_ hookRe-enable an outgoing hook.
netlify_get_ notification_ hookGet an outgoing hook.
netlify_list_ notification_ hook_ typesList outgoing hook types.
netlify_update_ notification_ hookUpdate an outgoing hook.
netlify_cancel_ teamCancel (delete) the connected team.
netlify_create_ site_ assetCreate a site asset.
netlify_create_ split_ testCreate a split test.
netlify_create_ teamCreate a new Netlify team.
netlify_delete_ site_ assetDelete a site asset.
netlify_get_ site_ assetGet a site asset.
netlify_get_ site_ asset_ urlGet a site asset's URL.
netlify_get_ split_ testGet a split test.
netlify_get_ submissionGet one form submission by id (Netlify answers with an one-item list).
netlify_get_ teamGet the connected team: name, slug, plan (type_name), billing details, capabilities and owners.
netlify_list_ site_ assetsList a site's assets.
netlify_list_ split_ testsList a site's split tests.
netlify_list_ team_ plansList plans available for new teams.
netlify_list_ teamsThe connected team (this connection is pinned to one Netlify team; other teams of the same login are not shown).
netlify_mark_ submission_ spamMark a form submission as spam.
netlify_mark_ submission_ verifiedMark a form submission as verified (not spam).
netlify_publish_ split_ testPublish a split test.
netlify_unpublish_ split_ testUnpublish a split test.
netlify_update_ site_ assetUpdate a site asset's state.
netlify_update_ split_ testUpdate a split test.
netlify_update_ teamUpdate the connected team's name, slug, billing details or plan.
netlify_add_ team_ memberAdd a member to a team.
netlify_create_ site_ dev_ server_ hookCreate a dev server hook.
netlify_create_ site_ snippetCreate a snippet.
netlify_delete_ site_ build_ hookDelete a build hook.
netlify_delete_ site_ dev_ server_ hookDelete a dev server hook.
netlify_delete_ site_ snippetDelete a snippet.
netlify_get_ site_ build_ hookGet a build hook.
netlify_get_ site_ dev_ serverGet a dev server.
netlify_get_ site_ dev_ server_ hookGet a dev server hook.
netlify_get_ site_ snippetGet a snippet.
netlify_get_ team_ memberGet a team member.
netlify_list_ site_ dev_ server_ hooksList a site's dev server hooks.
netlify_list_ site_ dev_ serversList a site's dev servers.
netlify_list_ site_ snippetsList a site's snippets.
netlify_remove_ team_ memberRemove a team member.
netlify_start_ site_ dev_ serverStart a dev server.
netlify_stop_ site_ dev_ serversStop a branch's dev servers.
netlify_update_ site_ build_ hookUpdate a build hook.
netlify_update_ site_ dev_ server_ hookUpdate a dev server hook.
netlify_update_ site_ dev_ server_ stateUpdate a dev server's state.
netlify_update_ site_ snippetUpdate a snippet.
netlify_update_ team_ memberUpdate a team member.
netlify_create_ deploy_ keyCreate a deploy key.
netlify_delete_ deploy_ keyDelete a deploy key.
netlify_get_ buildGet a build.
netlify_get_ deploy_ keyGet a deploy key.
netlify_get_ team_ build_ statusGet a team's build status.
netlify_list_ deploy_ keysList deploy keys.
netlify_list_ site_ buildsList a site's builds.
netlify_get_ site_ ai_ gateway_ tokenGet a site's AI Gateway token.
netlify_get_ site_ fileGet one file of the site's current deploy by its path.
netlify_get_ site_ tls_ certificateGet a site's TLS certificate.
netlify_get_ team_ ai_ gateway_ tokenGet the team's AI Gateway token.
netlify_list_ ai_ gateway_ providersList AI Gateway providers and models.
netlify_list_ site_ filesList the files of the site's current deploy.
netlify_list_ site_ tls_ certificatesList TLS certificates for a site's domain.
netlify_upload_ deploy_ fileUpload one file of a deploy created with netlify_create_site_deploy (only the files its required list asks for).
netlify_delete_ site_ formDelete a form.
netlify_get_ site_ metadataGet a site's metadata.
netlify_update_ site_ metadataUpdate a site's metadata.
netlify_get_ current_ userGet the current user.
netlify_list_ payment_ methodsList the payment methods on file for this login (card brand, last four digits, expiry).
netlify_list_ team_ audit_ logList a team's audit log events.
Credentials off one Netlify screen, then an endpoint your client signs into. Nothing to deploy, and nothing to install.
In Netlify open User settings, Applications, Personal access tokens and choose New access token. Name it, pick an expiry and copy it into PopMCP. If your login belongs to several teams, you pick the team each connection is for, and PopMCP locks the connection to it.
••••••••••••3f7aProduction deploys, rollbacks, deleted sites and DNS changes take effect on Netlify the moment the AI calls them. New connections start read-only until an owner or admin allows writes, environment variable values stay hidden unless you ask for one on a connection that may write, and only clients you tick on the PopMCP consent screen reach Netlify.
Drop the PopMCP URL into Claude, ChatGPT, Claude Code, Codex or any other supported client. It signs in through PopMCP with OAuth, so your Netlify credential never leaves the server.
app.popmcp.com/mcpAsk for something harmless before the agent changes anything. Writes run as soon as it calls them, so confirm it reads the right account first.
Which of my sites had a failed deploy this week, and what went wrong each time?
netlify_list_sitesok
Then just ask for the work
“Which of my sites had a failed deploy this week, and what went wrong each time?”
“Publish this landing page as a preview on my marketing site and give me the link”
“The last deploy of shop.example.com broke checkout: put the previous one back live”
“Set STRIPE_PUBLIC_KEY for production on my storefront site, rebuild it and tell me when it is live”
“Show this week's contact form submissions on my agency site and delete the spam ones”
“Point docs.example.com at my docs site with a CNAME record”
One hosted endpoint, registered once per client. The same tools and the same permissions, whichever window the request comes from.
Add the PopMCP URL under Customize → Connectors and the tools appear in every chat.
The same endpoint, registered in the browser. Nothing to install on the machine you are working from.
Register PopMCP as a custom connector, then let ChatGPT read and update the account.
Wire the endpoint into Codex or the Codex CLI when a task needs live business context, not a fixture.
Register the remote MCP server in OpenCode's config for terminal-first and scripted agent runs.
Add PopMCP as an MCP server in Z.ai's desktop app and work the account from the same window.
FAQ
What teams ask before putting Netlify behind an AI client.
A Netlify personal access token. In Netlify click your avatar, then User settings, Applications, Personal access tokens, New access token. Give it a name, choose when it expires and select Generate token. Netlify shows the token once, so copy it straight into PopMCP. If your team uses SAML single sign-on, tick Allow access to my SAML-based Netlify team when you create it. Resetting your Netlify password cancels every token, so you would connect again with a new one.
Yes. After the token is checked PopMCP lists every team your login belongs to and you choose which ones to connect, each into its own PopMCP workspace. A connection stays bound to the team you picked: the AI never has to name it, and a site, deploy, form or DNS zone that belongs to another team is refused before anything is sent.
Not by default. Every answer shows the variable names, contexts and scopes but hides the values, along with database connection strings, AI Gateway tokens and the site password. reveal_secret shows one value when you ask, and only on a connection allowed to make changes. Variables you mark secret in Netlify are write-only for everyone, so only their local development value can be read back.
Yes. deploy_files takes the files' paths and contents (text, or base64 for images), uploads only the ones Netlify does not already have and waits until the deploy is ready. It makes a preview at its own URL unless you ask for production, which replaces the live site. A deploy holds up to 500 files and 25 MB. Sites linked to a Git repository rebuild with start_site_build, and restore_deploy puts any earlier deploy back live.
14 of them. Through a notification hook PopMCP registers with the connection's own token: a deploy started, succeeded or failed, a deploy locked or unlocked, a deploy request pending, approved or rejected, and a new form submission. By comparing snapshots: a new site, a new form, a new DNS zone, a new team member and a new audit log event.
35 load by default, five of them one-call tools for publishing files, waiting for a deploy, a site overview, setting an environment variable and revealing a secret. The rest of the 166 operations stay searchable, from split tests, snippets and add-ons to dev servers, databases, agent runs and deploy keys: 74 read and 92 write. A read-only connection keeps every write tool from running.
No. PopMCP hosts it and gives you a Streamable HTTP MCP URL. There is nothing to deploy, no callback URL to register, and no infrastructure to keep running or patch.
Any client that supports a remote Streamable HTTP MCP server: Claude Desktop, Claude Web, Claude Code, ChatGPT custom connectors, Codex and the Codex CLI, OpenCode and Z.ai's ZCode, as well as editors such as Cursor, Windsurf and Zed. Your client signs in to PopMCP with OAuth; the provider credential never leaves the server.
Connect Netlify in PopMCP first, then run claude mcp add --transport http popmcp https://app.popmcp.com/mcp in a terminal. Inside Claude Code, run /mcp and sign in to PopMCP in the browser window it opens, ticking Netlify on the consent screen. The Netlify tools are then available in that session, and no Netlify credential is stored on your machine.
Loading 171 tool definitions into every conversation burns context before the work starts. PopMCP loads a curated 35-tool set covering the everyday workflows and keeps the rest searchable, so your AI pulls a specialist tool only when a task needs it. Every tool stays searchable, and on Scale the owner can load the full catalog for a teammate's connection.
A tool is something your AI calls, and there are 171 here. A trigger is something PopMCP watches for you: 14 Netlify events that can start work on the PopMCP side. Triggers never enter your AI client's context, and none of them ask you to paste a callback URL into Netlify.
Launch a hosted MCP endpoint for Netlify, keep tool access under control, and start testing real workflow prompts right away.