feat: add runtime permission granting tools and --grant-all-permissions flag

New tools for managing browser permissions at runtime (no restart needed):
- browser_grant_permissions: Grant specific or ALL permissions at runtime
  - Supports `all: true` to grant all common permissions at once
- browser_clear_permissions: Revoke all granted permissions
- browser_set_geolocation: Set geolocation coordinates at runtime

New CLI flag:
- --grant-all-permissions: Start with all permissions pre-granted
- PLAYWRIGHT_MCP_GRANT_ALL_PERMISSIONS env var support

Permissions granted with `all: true` or --grant-all-permissions:
- geolocation, notifications, camera, microphone
- clipboard-read, clipboard-write
- accelerometer, gyroscope, magnetometer
- midi, background-sync, ambient-light-sensor
- accessibility-events
This commit is contained in:
Ryan Malloy 2026-01-12 21:01:48 -07:00
parent 5e5123d1ac
commit 0031d17f32
4 changed files with 225 additions and 0 deletions

View file

@ -34,6 +34,7 @@ export type CLIOptions = {
consoleOutputFile?: string;
device?: string;
executablePath?: string;
grantAllPermissions?: boolean;
headless?: boolean;
host?: string;
ignoreHttpsErrors?: boolean;
@ -191,6 +192,25 @@ export function configFromCLIOptions(cliOptions: CLIOptions): Config {
if (cliOptions.blockServiceWorkers)
contextOptions.serviceWorkers = 'block';
// Grant all permissions if requested
if (cliOptions.grantAllPermissions) {
contextOptions.permissions = [
'geolocation',
'notifications',
'camera',
'microphone',
'clipboard-read',
'clipboard-write',
'accelerometer',
'gyroscope',
'magnetometer',
'midi',
'background-sync',
'ambient-light-sensor',
'accessibility-events',
];
}
const result: Config = {
browser: {
browserName,
@ -236,6 +256,7 @@ function configFromEnv(): Config {
options.config = envToString(process.env.PLAYWRIGHT_MCP_CONFIG);
options.device = envToString(process.env.PLAYWRIGHT_MCP_DEVICE);
options.executablePath = envToString(process.env.PLAYWRIGHT_MCP_EXECUTABLE_PATH);
options.grantAllPermissions = envToBoolean(process.env.PLAYWRIGHT_MCP_GRANT_ALL_PERMISSIONS);
options.headless = envToBoolean(process.env.PLAYWRIGHT_MCP_HEADLESS);
options.host = envToString(process.env.PLAYWRIGHT_MCP_HOST);
options.ignoreHttpsErrors = envToBoolean(process.env.PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS);