Skip to main content
Glama
multi-account-netlify-mcp

multi-account-netlify-mcp

multi-account-netlify-mcp

Use several Netlify accounts from your AI coding agent at the same time.

This module runs the official @netlify/mcp server once per account and adds an account argument to each of its tools. Send a call to one account, to a list of accounts, or to all of them. Each account is added with its own Netlify login, from a terminal or from the chat, and its token is stored in the operating system's credential store. The official package is never edited, so npm update brings in its changes.

It installs into four agents: Claude Code, Codex, opencode and Google Antigravity (agy).

Status: version 0.1.3. Tested on Windows only.

Quick start

npm install -g multi-account-netlify-mcp
multi-account-netlify-mcp install
multi-account-netlify-mcp add work
multi-account-netlify-mcp add personal
multi-account-netlify-mcp default work
multi-account-netlify-mcp doctor

install in a terminal asks which agents and which scope you want, then shows the exact command before it runs. add work opens a browser for the Netlify login: sign in with the account you want to call work. In a chat, ask the agent to add an account instead: it uses the account_add tool, which opens the same sign-in. Restart the agents you installed into, and ask one of them about your Netlify sites.

No browser on this machine? add work --pat asks for a Netlify personal access token instead. The input is hidden.

Related MCP server: OpenConnector

What you get

  • One tool set, many accounts. Each official Netlify tool takes an account argument: one name, a comma-separated list, or all. Reads can run on several accounts at once. A change always runs on one account.

  • Safe by design. Changes are never sent to several accounts. Tokens never appear in config files, in output, or in the chat.

  • Installs everywhere you work. Claude Code (plugin), Codex, opencode and Antigravity each get the server and the account guide, at the scope you choose.

  • Clean uninstalls. Each install records what it wrote, so uninstall removes only that.

Documentation

Document

What it covers

docs/INSTALL.md

Requirements, install paths, updating, uninstalling

docs/USAGE.md

Every command and option, output format, exit codes

docs/AGENTS.md

Each agent: scopes, what is written where, skills, limits

docs/MCP.md

The tools, the account argument, routing rules, result shapes

docs/ACCOUNTS.md

Logins, personal access tokens, storage, defaults, removal

docs/SAFETY.md

What is refused, what needs confirmation, secrets and personal data

docs/CONFIGURATION.md

Environment variables, data folder, state files, config files

docs/TROUBLESHOOTING.md

Common errors and how to fix them

docs/TESTING.md

The test suite, live checks, CI

docs/DEVELOPMENT.md

Code layout, adding an agent or an operation

docs/RELEASING.md

How a release reaches npm

CHANGELOG.md

What changed in each version

Agents

install takes the agents to set up: claude, codex, opencode, antigravity, or all. With no agent named, it installs into every agent that is set up on this machine.

Agent

Global

Project

Local

Server registered with

Skill

Claude Code

yes

yes

yes

the plugin (claude plugin)

yes, in the plugin

Codex

yes

yes

no

codex mcp add (global), .codex/config.toml (project)

yes

opencode

yes

yes

no

opencode.json entry

yes, through instructions

Antigravity

yes

no

no

agy mcp add

yes

multi-account-netlify-mcp install                      # every agent set up here, global
multi-account-netlify-mcp install codex opencode       # only these two, global
multi-account-netlify-mcp install --scope project      # every agent set up here, this folder
multi-account-netlify-mcp install claude --scope local # Claude Code, this folder, only for you
multi-account-netlify-mcp install --dry-run            # show the plan, change nothing
multi-account-netlify-mcp update                       # refresh what is already installed
multi-account-netlify-mcp uninstall codex              # remove from Codex, in every scope

In a terminal, install asks for anything you left out, and shows the exact command before it runs. Scripts and CI pass flags, and nothing is asked. --yes skips the final confirmation. See docs/AGENTS.md for what each agent gets.

Scopes

  • global (default): every folder, for your user account.

  • project: the folder you pick, and it can be shared through git.

  • local: the folder you pick, only for you (Claude Code only).

For Claude Code, a project install is safe to commit: .claude/settings.json then holds the marketplace (from GitHub) and the plugin reference, not your machine's paths. The other agents' project files hold this computer's Node and CLI paths, so do not commit those.

Use

Ask your agent as usual. Each Netlify tool takes an optional account argument:

Value

What happens

left out

the default account (set with default <name>). With no default and several accounts, the call fails and lists the names.

work

the call runs on that account only, and the result is the official result.

work,personal

reads run on each listed account. Changes are refused: name one account.

all

reads run on every account. Changes are refused: name one account.

How each operation can span accounts is in docs/MCP.md. In short: reads with no id run on every account; reads that need an id (a project, deploy, team or site) reach every account and keep only the account that owns the id; reads of sensitive data may span accounts; changes stay on one account.

Plugin commands in Claude Code:

Command

What it does

/multi-account-netlify:accounts

list the accounts (tokens are never shown)

/multi-account-netlify:add-account <name> [--pat]

add an account. A browser login is done by the agent with the account_add tool. With --pat, type the command it gives you in your terminal, so the token stays out of the chat.

/multi-account-netlify:set-default <name>

choose the default account

/multi-account-netlify:remove-account <name>

remove an account and its stored token, after you confirm

/multi-account-netlify:doctor

check the data folder, the official server, the agents and each token

The same account commands work in a terminal, for example multi-account-netlify-mcp list. The agent also has two account tools: account_add (a browser login) and account_list.

Update

npm install -g multi-account-netlify-mcp@latest
multi-account-netlify-mcp update

Then restart the agents. update refreshes only the installs that already exist. The npm command also updates the official @netlify/mcp package, because it is a dependency.

Uninstall

multi-account-netlify-mcp remove work       # once per account; deletes its stored token
multi-account-netlify-mcp uninstall         # removes this server from every agent and scope here
npm uninstall -g multi-account-netlify-mcp

See docs/INSTALL.md for the full list, including the Claude Code marketplace.

Security

  • Tokens are stored in the operating system's credential store. On Windows that is Credential Manager, with one entry per account. accounts.json holds names, emails and dates, never tokens.

  • Each add runs netlify login in a throwaway profile folder. Your own Netlify CLI login is never read or changed.

  • Each official server runs with an empty config folder and only its own account's token.

  • Agent config files are backed up (.bak) before a change, and an invalid file is never overwritten.

  • Changes are never sent to several accounts. Reads are.

Report security issues privately through GitHub's security advisories for this repository, not in a public issue. See SECURITY.md.

Limits

  • Tested on Windows only. macOS and Linux are untested.

  • The guided install questions are tested with scripted answers, not yet in a real terminal.

  • Codex and Antigravity skills are loaded from the folders listed in docs/AGENTS.md. Their discovery is verified by location and format, not by a live model run.

  • opencode installs only into opencode.json. A opencode.jsonc file is not touched.

  • Claude Code keeps the marketplace declaration after an uninstall, because other folders may use it.

  • The official netlify MCP server, if you also have it installed, gives you duplicate tools. Remove that entry when you use this one.

Development

npm install
npm test          # builds, then runs the tests in dist/test
npm run typecheck

See docs/DEVELOPMENT.md and docs/TESTING.md.

License

Apache License 2.0. See LICENSE and NOTICE.

Available Tools

10 tools
netlify-coding-rulesB
Read-onlyIdempotent

ALWAYS call when writing serverless or Netlify code. required step before creating or editing any type of functions, Netlify sdk/library usage, etc.

Inputs: creationType (required), reference.

netlify-deploy-services-readerA
Read-onlyIdempotent

Select and run one of the following Netlify read operations (read-only) get-deploy, get-deploy-for-site

Multi-account (the account argument): get-deploy: only the account that owns the id answers, and accounts without it are listed under notFoundIn; get-deploy-for-site: only the account that owns the id answers, and accounts without it are listed under notFoundIn.

Inputs: selectSchema (required), account.

netlify-deploy-services-updaterC
Destructive

Select and run one of the following Netlify write operations deploy-site

Multi-account (the account argument): deploy-site: one account only, so a list or all is refused.

Inputs: selectSchema (required), account.

netlify-extension-services-readerA
Read-onlyIdempotent

Select and run one of the following Netlify read operations (read-only) get-extensions, get-full-extension-details, initialize-database

Multi-account (the account argument): get-extensions: every named account answers; get-full-extension-details: only the account that owns the id answers, and accounts without it are listed under notFoundIn; initialize-database: every named account answers.

Inputs: selectSchema (required), account.

netlify-extension-services-updaterB
DestructiveIdempotent

Select and run one of the following Netlify write operations change-extension-installation

Multi-account (the account argument): change-extension-installation: one account only, so a list or all is refused.

Inputs: selectSchema (required), account.

netlify-observability-services-readerC
Read-onlyIdempotent

Select and run one of the following Netlify read operations (read-only) get-counts, get-topk, get-timeseries, get-request-logs, get-request-detail

Multi-account (the account argument): get-counts: only the account that owns the id answers, and accounts without it are listed under notFoundIn; get-topk: only the account that owns the id answers, and accounts without it are listed under notFoundIn; get-timeseries: only the account that owns the id answers, and accounts without it are listed under notFoundIn; get-request-logs: only the account that owns the id answers, and accounts without it are listed under notFoundIn; get-request-detail: only the account that owns the id answers, and accounts without it are listed under notFoundIn.

Inputs: selectSchema (required), account.

netlify-project-services-readerA
Read-onlyIdempotent

Select and run one of the following Netlify read operations (read-only) get-project, get-projects, get-forms-for-project

Multi-account (the account argument): get-project: only the account that owns the id answers, and accounts without it are listed under notFoundIn; get-projects: every named account answers; get-forms-for-project: only the account that owns the id answers, and accounts without it are listed under notFoundIn.

Inputs: selectSchema (required), account.

netlify-project-services-updaterB
Destructive

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

Multi-account (the account argument): update-visitor-access-controls: one account only, so a list or all is refused; update-forms: one account only, so a list or all is refused; manage-form-submissions: get-submissions needs the account that owns the form (only it answers); delete-submission needs one account; update-project-name: one account only, so a list or all is refused; manage-env-vars: listing needs the account that owns the site (only it answers); creating, updating and deleting need one account; create-new-project: one account only, so a list or all is refused.

Inputs: selectSchema (required), account.

netlify-team-services-readerA
Read-onlyIdempotent

Select and run one of the following Netlify read operations (read-only) get-teams, get-team, get-team-env-vars

Multi-account (the account argument): get-teams: every named account answers; get-team: only the account that owns the id answers, and accounts without it are listed under notFoundIn; get-team-env-vars: only the account that owns the id answers, and accounts without it are listed under notFoundIn.

Inputs: selectSchema (required), account.

netlify-user-services-readerC
Read-onlyIdempotent

Select and run one of the following Netlify read operations (read-only) get-user

Multi-account (the account argument): get-user: every named account answers.

Inputs: selectSchema (required), account.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 10 tools

    Disambiguation4/5

    Each tool is scoped to a distinct Netlify domain (user, deploy, team, project, extension, observability) and cleanly split into read vs. write, so boundaries are clear. The only ambiguity is that each tool multiplexes many sub-operations internally, and netlify-coding-rules overlaps thematically with everything as a pre-step advisory tool.

    Naming Consistency4/5

    Tools follow a strong, predictable pattern: netlify-<domain>-services-<reader|updater>, which makes read vs. write obvious at a glance. The lone outlier is netlify-coding-rules, which breaks the pattern but is clearly a different kind of tool.

    Tool Count5/5

    Ten tools is well-scoped for a multi-domain Netlify server, and the dispatcher pattern lets each tool cover several operations without surface bloat. No tool feels redundant or padded.

    Completeness4/5

    Read coverage is thorough across user, deploy, team, project, extension, and observability, and core writes exist (deploy-site, create-new-project, manage-env-vars, forms, extension install change). Notable gaps remain, including team/member management writes, project or site deletion, and DNS management, but agents can work around most of these.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      B
      maintenance
      Local, open-source multi-account MCP broker — one endpoint, every account. Add credentials once and switch identity without reconnecting, from any LLM client.
      5
      9
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Provides a single local MCP endpoint that connects Gmail, GitHub, Slack, Notion, and Linear once, with multiple accounts per service, so any AI agent can use per-agent tokens, policies, and optional result filtering without re-authenticating.
      2 npm
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      Runs each MCP server once and lets any number of AI agents connect over HTTP with their own keys, per-tool grants and audit logging, plus a shared task list, shared memory and agent-to-agent requests. Enables agents to work as a coordinated team without duplicating processes, credentials or work.
      12 npm
      MIT
    • A
      license
      Not graded
      quality
      B
      maintenance
      Enables Claude Code and Codex to work with multiple accounts of the same MCP server at once, such as two Gmail inboxes or several Slack and Notion workspaces. It presents a single toolset where every tool takes a required account argument, with per-account OAuth sign-in and credentials isolated in the macOS Keychain.
      MIT