Skip to main content
Glama
andresolbach

nodriver-mcp-server

Manage Chrome extensions

manage_extensions
Destructive

List, enable, disable, load, or unload Chrome extensions in the active profile. Control the master switch and manage unpacked extensions for browser automation.

Instructions

List, enable, disable or load Chrome extensions.

Two separate mechanisms are in play. The master switch: Chrome runs with --disable-extensions by default, so extensions installed in the profile stay dark until it is turned on. And unpacked extensions loaded from a folder on disk. The master switch governs both — with it off, unpacked extensions stay registered but do not load.

"load" only works on Chromium or Chrome for Testing. Official Google Chrome builds have ignored --load-extension since v137 (still true on Chrome 151, even with --enable-unsafe-extension-debugging), and this tool says so rather than pretending it worked. On official Chrome the working path is: install the extension once from the Web Store into a persistent profile, then switch it on with "on".

Extensions only persist in a persistent profile — on the default ephemeral one nothing can stay installed.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pathNoFolder containing the extension's manifest.json, for "load" and "unload". Ignored by the other actions.
actionNo"list" shows the extensions installed in the active profile plus the current state, and changes nothing. "on" and "off" flip the master switch. "load" registers an unpacked extension from `path` and implies "on". "unload" stops loading `path`, or every unpacked extension when `path` is empty. Every action except "list" restarts the browser.list
browserNoWhich browser to act on. Each name is an independent Chrome, created on first use. Omit for the shared default; parallel agents each need their own name.default

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.5.0
    • addedInput schema / properties / browser
      Added value: +{
      +  "default": "default",
      +  "description": "Which browser to act on. Each name is an independent Chrome, created on first use. Omit for the shared default; parallel agents each need their own name.",
      +  "type": "string"
      +}
  2. First observedv1.7.2

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and readOnlyHint=false, but the description adds crucial behavioral details: the master switch governs both installed and unpacked extensions, every action except 'list' restarts the browser (from schema), and official Chrome ignores --load-extension since v137. It also discloses the persistence limitation. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized into three paragraphs: purpose, mechanism explanation, and platform limitations. Each sentence carries weight, avoiding redundancy. The front-loaded purpose statement and the clear breakdown of behaviors make it easy for an agent to grasp the tool's capabilities quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple actions, platform-specific behavior, persistence caveats), the description covers all critical aspects: the master switch, load restrictions, persistence, and browser independence. The output schema exists and parameter descriptions are thorough, so nothing essential is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already documented. The description enriches understanding by explaining the interplay between 'action' values and the master switch, and clarifies the 'browser' parameter's independence. For instance, it explains that 'load' implies 'on', which is not explicitly stated in the schema description for 'action'. This adds semantic value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'List, enable, disable or load Chrome extensions' – a clear verb+resource that immediately states the tool's function. It also explains the two mechanisms (master switch and unpacked loading), which distinguishes the tool's behavior from a simple toggle. No sibling tool covers extensions, so differentiation is inherent.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use which action: it states that 'load' only works on Chromium or Chrome for Testing, and on official Chrome the alternative path is to install from Web Store and use 'on'. It also explains persistence requirements, telling the agent to use a persistent profile for extensions to survive. This is concrete when-to-use information.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.