playwright-mcp

GitHub
30.2k 2.4k 简单 3 次阅读 昨天Apache-2.0Agent插件
AI 解读 由 AI 自动生成,仅供参考

Playwright MCP 是一款基于模型上下文协议(MCP)的服务器工具,旨在让大语言模型(LLM)具备直接操控浏览器的能力。它通过 Playwright 引擎,将网页内容转化为结构化的无障碍快照数据,使 AI 能够像人类一样理解并操作页面元素,而无需依赖截图或视觉识别模型。

这一设计巧妙解决了传统自动化方案中常见的痛点:既避免了因处理图片带来的高昂算力成本和延迟,又消除了视觉模型可能产生的识别歧义,让 AI 的交互过程更加快速、轻量且结果确定。对于需要长期运行、状态保持或复杂推理的自主智能体任务(如自动探索测试、自我修复脚本等),Playwright MCP 提供了比命令行更丰富的上下文支持。

该工具主要面向开发者、测试工程师以及构建 AI 智能体的研究人员。如果你正在使用 VS Code、Cursor、Claude Desktop 等支持 MCP 协议的编辑器或客户端,只需简单配置即可集成。其核心技术亮点在于“纯文本结构化交互”,让大模型在不消耗额外视觉 Token 的情况下,也能精准执行点击、输入、导航等浏览器操作,是打造高效网页自动化工作流的理想选择。

使用场景

某电商平台的测试工程师需要让 AI 助手自动执行复杂的“用户注册并验证优惠券领取”流程,且需在不同分辨率下反复运行以排查偶发性故障。

没有 playwright-mcp 时

  • 依赖视觉模型成本高:必须调用昂贵的多模态大模型分析截图,不仅响应慢,还极易因页面广告或加载动画等视觉噪点导致判断失误。
  • 上下文窗口迅速耗尽:每次交互都需传输高清图片,巨大的 Token 消耗使得长流程任务(如跨多页操作)难以在有限的上下文窗口内完成。
  • 操作缺乏确定性:基于图像识别的点击坐标存在偏差,AI 经常点错按钮或无法精准定位动态生成的表单元素,导致脚本频繁中断。
  • 调试与自愈困难:当流程失败时,AI 只能看到静态图片,无法深入理解页面 DOM 结构的变化,难以自主分析原因并修复测试逻辑。

使用 playwright-mcp 后

  • 纯结构化数据驱动:playwright-mcp 直接提供页面的无障碍树(Accessibility Tree),AI 仅需处理轻量级文本数据即可精准识别元素,彻底告别对视觉模型的依赖。
  • Token 效率显著提升:摒弃了冗余的图片传输,仅交换关键结构信息,使得 AI 能在同一会话中流畅执行长达数十步的复杂业务闭环。
  • 操作精准且可复现:基于语义化的元素定位替代了模糊的坐标点击,确保无论页面如何微调布局,AI 都能稳定锁定目标控件,消除执行歧义。
  • 具备深度自愈能力:遇到报错时,AI 可通过 playwright-mcp 实时 introspect(内省)页面状态变化,自主推导失败原因并动态调整后续操作步骤。

playwright-mcp 通过将浏览器自动化转化为高效的结构性对话,让 AI 代理具备了低成本、高可靠且能自我修复的长期网页任务执行能力。

运行环境要求

操作系统
  • 未说明
GPU

不需要 GPU

内存

未说明

依赖
notes该工具基于 Node.js 运行,无需 Python 环境或 GPU 支持。需要安装 Node.js 18 或更高版本。需配合支持 MCP 协议的客户端使用(如 VS Code, Cursor, Claude Desktop, Windsurf, Goose 等)。默认情况下文件系统访问受限,仅允许访问工作区根目录,如需访问外部文件需添加特定启动参数。
python不需要 Python
Node.js 18+
npx
@playwright/mcp@latest
playwright-mcp hero image

快速开始

Playwright MCP

一个模型上下文协议(MCP)服务器,使用 Playwright 提供浏览器自动化功能。该服务器使大型语言模型能够通过结构化的无障碍快照与网页交互,无需依赖截图或经过视觉调优的模型。

Playwright MCP 与 Playwright CLI

本包为 Playwright 提供了 MCP 接口。如果你正在使用 编码代理,可能更适合使用 CLI+SKILLS

  • CLI:现代 编码代理 越来越倾向于将基于 CLI 的工作流以 SKILL 的形式暴露,而不是使用 MCP,因为 CLI 调用更节省 token:它们避免将庞大的工具模式和冗长的无障碍树加载到模型上下文中,允许代理通过简洁、专门构建的命令来执行操作。这使得 CLI + SKILLs 更适合高吞吐量的编码代理,这些代理需要在有限的上下文窗口内平衡浏览器自动化与大型代码库、测试以及推理需求。
    了解更多关于 Playwright CLI with SKILLS

  • MCP:MCP 仍然适用于那些受益于持久化状态、丰富自省能力以及对页面结构进行迭代推理的专用代理循环,例如探索性自动化、自愈测试,或者长期运行的自主工作流,在这些场景中,保持连续的浏览器上下文比 token 成本更为重要。

核心特性

  • 快速且轻量。使用 Playwright 的无障碍树,而非基于像素的输入。
  • LLM 友好。无需视觉模型,完全基于结构化数据运行。
  • 确定性的工具应用。避免了基于截图方法常见的歧义。

系统要求

  • Node.js 18 或更高版本
  • VS Code、Cursor、Windsurf、Claude Desktop、Goose 或其他任何 MCP 客户端

快速开始

首先,使用你的客户端安装 Playwright MCP 服务器。

标准配置 在大多数工具中都适用:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

在 VS Code 中安装 在 VS Code Insiders 中安装

Amp

可以通过 Amp VS Code 扩展的设置界面添加,或直接更新 settings.json 文件:

"amp.mcpServers": {
  "playwright": {
    "command": "npx",
    "args": [
      "@playwright/mcp@latest"
    ]
  }
}

Amp CLI 设置:

使用下面的 amp mcp add 命令添加:

amp mcp add playwright -- npx @playwright/mcp@latest
Antigravity

可以通过 Antigravity 的设置界面添加,或直接编辑配置文件:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
Claude Code

使用 Claude Code CLI 添加 Playwright MCP 服务器:

claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop

按照 MCP 安装 指南,使用上述标准配置。

Cline

请参考 配置 MCP 服务器 部分的说明。

示例:本地设置

将以下内容添加到你的 cline_mcp_settings.json 文件中:

{
  "mcpServers": {
    "playwright": {
      "type": "stdio",
      "command": "npx",
      "timeout": 30,
      "args": [
        "-y",
        "@playwright/mcp@latest"
      ],
      "disabled": false
    }
  }
}
Codex

使用 Codex CLI 添加 Playwright MCP 服务器:

codex mcp add playwright npx "@playwright/mcp@latest"

你也可以创建或编辑配置文件 ~/.codex/config.toml,并添加:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

更多信息,请参阅 Codex MCP 文档

Copilot

使用 Copilot CLI 交互式地添加 Playwright MCP 服务器:

/mcp add

或者,创建或编辑配置文件 ~/.copilot/mcp-config.json,并添加:

{
  "mcpServers": {
    "playwright": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

更多信息,请参阅 Copilot CLI 文档

Cursor

点击按钮即可安装:

在 Cursor 中安装

或者手动安装:

前往 Cursor 设置 -> MCP -> 添加新的 MCP 服务器。根据喜好命名,选择 command 类型,并输入命令 npx @playwright/mcp@latest。你还可以通过点击 编辑 来验证配置或添加类似命令的参数。

Factory

使用 Factory CLI 添加 Playwright MCP 服务器:

droid mcp add playwright "npx @playwright/mcp@latest"

你也可以在 Factory droid 中输入 /mcp,打开用于管理 MCP 服务器的交互式界面。

更多信息,请参阅 Factory MCP 文档

Gemini CLI

按照 MCP 安装 指南,使用上述标准配置。

Goose

点击按钮即可安装:

在 Goose 中安装

或者手动安装:

前往 高级设置 -> 扩展程序 -> 添加自定义扩展程序。根据您的喜好命名,选择类型为 STDIO,并将 命令 设置为 npx @playwright/mcp。点击“添加扩展程序”。

Kiro

添加到 Kiro

请遵循 MCP 服务器的 文档。例如,在 .kiro/settings/mcp.json 中:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
LM Studio

点击按钮即可安装:

将 MCP 服务器 playwright 添加到 LM Studio

或者手动安装:

前往右侧边栏的 程序 -> 安装 -> 编辑 mcp.json。使用上述标准配置。

opencode

请遵循 MCP 服务器的 文档。例如,在 ~/.config/opencode/opencode.json 中:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "npx",
        "@playwright/mcp@latest"
      ],
      "enabled": true
    }
  }
}
Qodo Gen

在 VSCode 或 IntelliJ 中打开 Qodo Gen 聊天面板 → 连接更多工具 → + 添加新的 MCP → 粘贴上述标准配置。

点击 保存

VS Code

点击按钮即可安装:

在 VS Code 中安装 在 VS Code Insiders 中安装

或者手动安装:

请按照 MCP 安装 指南,使用上述标准配置。您也可以通过 VS Code CLI 安装 Playwright 的 MCP 服务器:



# 对于 VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'

安装完成后,Playwright 的 MCP 服务器就可以在 VS Code 中与您的 GitHub Copilot 助手一起使用了。

Warp

前往 设置 -> AI -> 管理 MCP 服务器 -> + 添加添加 MCP 服务器。使用上述标准配置。

或者,您也可以在 Warp 提示词中使用斜杠命令 /add-mcp,并粘贴上面的标准配置:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
Windsurf

请遵循 Windsurf MCP 的 文档。使用上述标准配置。

配置

Playwright MCP 服务器支持以下参数。这些参数可以在上述 JSON 配置中作为 "args" 列表的一部分提供:

选项 描述
--allowed-hosts <hosts...> 该服务器允许服务的主机的逗号分隔列表。默认为服务器绑定的主机。传递 '*' 可禁用主机检查。
env PLAYWRIGHT_MCP_ALLOWED_HOSTS
--allowed-origins 浏览器允许请求的受信任来源的分号分隔列表。默认允许所有来源。重要提示:作为安全边界,且影响重定向。
env PLAYWRIGHT_MCP_ALLOWED_ORIGINS
--allow-unrestricted-file-access 允许访问工作区根目录之外的文件。同时也允许无限制地访问 file:// URL。默认情况下,文件系统访问仅限于工作区根目录(或如果没有配置根目录则为当前工作目录),并且会阻止导航到 file:// URL。
env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS
--blocked-origins 浏览器被阻止请求的来源的分号分隔列表。黑名单会在白名单之前被评估。如果未使用白名单,则未匹配黑名单的请求仍将被允许。重要提示:作为安全边界,且影响重定向。
env PLAYWRIGHT_MCP_BLOCKED_ORIGINS
--block-service-workers 阻止 Service Workers
env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS
--browser 要使用的浏览器或 Chrome 渠道,可能的值包括:chrome、firefox、webkit、msedge。
env PLAYWRIGHT_MCP_BROWSER
--caps 要启用的附加功能的逗号分隔列表,可能的值包括:vision、pdf、devtools。
env PLAYWRIGHT_MCP_CAPS
--cdp-endpoint 要连接的 CDP 端点。
env PLAYWRIGHT_MCP_CDP_ENDPOINT
--cdp-header <headers...> 与连接请求一起发送的 CDP 头部,可以指定多个。
env PLAYWRIGHT_MCP_CDP_HEADER
--cdp-timeout 连接到 CDP 端点的超时时间,单位为毫秒,默认为 30000 毫秒。
env PLAYWRIGHT_MCP_CDP_TIMEOUT
--codegen 指定用于代码生成的语言,可能的值包括:“typescript”、“none”。默认为“typescript”。
env PLAYWRIGHT_MCP_CODEGEN
--config 配置文件的路径。
env PLAYWRIGHT_MCP_CONFIG
--console-level 控制台消息的返回级别:“error”、“warning”、“info”、“debug”。每个级别都包含更严重级别的消息。
env PLAYWRIGHT_MCP_CONSOLE_LEVEL
--device 要模拟的设备,例如:“iPhone 15”。
env PLAYWRIGHT_MCP_DEVICE
--executable-path 浏览器可执行文件的路径。
env PLAYWRIGHT_MCP_EXECUTABLE_PATH
--extension 连接到正在运行的浏览器实例(仅限 Edge/Chrome)。需要安装“Playwright MCP Bridge”浏览器扩展。
env PLAYWRIGHT_MCP_EXTENSION
--endpoint 要连接的已绑定浏览器端点。
env PLAYWRIGHT_MCP_ENDPOINT
--grant-permissions <permissions...> 要授予浏览器上下文的权限列表,例如“geolocation”、“clipboard-read”、“clipboard-write”。
env PLAYWRIGHT_MCP_GRANT_PERMISSIONS
--headless 以无头模式运行浏览器,默认为有头模式。
env PLAYWRIGHT_MCP_HEADLESS
--host 服务器要绑定的主机。默认为 localhost。使用 0.0.0.0 可绑定到所有接口。
env PLAYWRIGHT_MCP_HOST
--ignore-https-errors 忽略 HTTPS 错误。
env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS
--init-page <path...> 在 Playwright 页面对象上求值的 TypeScript 文件路径。
env PLAYWRIGHT_MCP_INIT_PAGE
--init-script <path...> 作为初始化脚本添加的 JavaScript 文件路径。该脚本将在页面上的任何其他脚本之前在每个页面上执行。可以多次指定。
env PLAYWRIGHT_MCP_INIT_SCRIPT
--isolated 将浏览器配置文件保留在内存中,不将其保存到磁盘。
env PLAYWRIGHT_MCP_ISOLATED
--image-responses 是否向客户端发送图片响应。可以是“allow”或“omit”,默认为“allow”。
env PLAYWRIGHT_MCP_IMAGE_RESPONSES
--no-sandbox 禁用通常会被沙盒化的所有进程类型的沙盒。
env PLAYWRIGHT_MCP_NO_SANDBOX
--output-dir 输出文件的目录路径。
env PLAYWRIGHT_MCP_OUTPUT_DIR
--output-mode 是否将快照、控制台消息、网络日志保存到文件或标准输出。可以是“file”或“stdout”。默认为“stdout”。
env PLAYWRIGHT_MCP_OUTPUT_MODE
--port 用于 SSE 传输的监听端口。
env PLAYWRIGHT_MCP_PORT
--proxy-bypass 要绕过代理的逗号分隔域名,例如“.com,chromium.org,.domain.com”。
env PLAYWRIGHT_MCP_PROXY_BYPASS
--proxy-server 指定代理服务器,例如“http://myproxy:3128”或“socks5://myproxy:8080”。
env PLAYWRIGHT_MCP_PROXY_SERVER
--sandbox 为通常不会被沙盒化的所有进程类型启用沙盒。
env PLAYWRIGHT_MCP_SANDBOX
--save-session 是否将 Playwright MCP 会话保存到输出目录。
env PLAYWRIGHT_MCP_SAVE_SESSION
--secrets 包含 dotenv 格式秘密的文件路径。
env PLAYWRIGHT_MCP_SECRETS
--shared-browser-context 在所有连接的 HTTP 客户端之间重用相同的浏览器上下文。
env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT
--snapshot-mode 在为响应拍摄快照时,指定使用的模式。可以是“full”或“none”。默认为“full”。
env PLAYWRIGHT_MCP_SNAPSHOT_MODE
--storage-state 隔离会话的存储状态文件路径。
env PLAYWRIGHT_MCP_STORAGE_STATE
--test-id-attribute 指定用于测试 ID 的属性,默认为“data-testid”。
env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE
--timeout-action 指定操作超时时间,单位为毫秒,默认为 5000 毫秒。
env PLAYWRIGHT_MCP_TIMEOUT_ACTION
--timeout-navigation 指定导航超时时间,单位为毫秒,默认为 60000 毫秒。
env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION
--user-agent 指定用户代理字符串。
env PLAYWRIGHT_MCP_USER_AGENT
--user-data-dir 用户数据目录的路径。如果未指定,则会创建一个临时目录。
env PLAYWRIGHT_MCP_USER_DATA_DIR
--viewport-size 指定浏览器视口大小,单位为像素,例如“1280x720”。
env PLAYWRIGHT_MCP_VIEWPORT_SIZE

用户配置文件

您可以将 Playwright MCP 以持久化配置文件模式运行,就像使用常规浏览器一样(默认模式),也可以在隔离的上下文中为测试会话运行,或者通过浏览器扩展程序连接到您现有的浏览器。

持久化配置文件

所有已登录的信息都将存储在持久化配置文件中。如果您希望清除离线状态,可以在会话之间删除该配置文件。持久化配置文件位于以下路径,您也可以使用 --user-data-dir 参数来覆盖它:

# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-{workspace-hash}

# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-{workspace-hash}

# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}

{workspace-hash} 是根据 MCP 客户端的工作区根目录派生的,因此不同的项目会自动获得独立的配置文件。

隔离模式

在隔离模式下,每个会话都会在独立的配置文件中启动。每次您让 MCP 关闭浏览器时,该会话就会结束,并且此会话的所有存储状态都会被清除。您可以通过配置中的 contextOptions--storage-state 参数向浏览器提供初始存储状态。有关存储状态的更多信息,请参阅 此处

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--isolated",
        "--storage-state={path/to/storage.json}"
      ]
    }
  }
}

浏览器扩展程序

Playwright MCP Chrome 扩展程序允许您连接到现有的浏览器标签页,并利用您的已登录会话和浏览器状态。有关安装和设置说明,请参阅 packages/extension/README.md

初始状态

有多种方式可以为浏览器上下文或页面提供初始状态。

对于存储状态,您可以:

  • 使用 --user-data-dir 参数指定用户数据目录来启动。这将在会话之间持续保存所有浏览器数据。
  • 使用 --storage-state 参数指定存储状态文件来启动。这会将文件中的 Cookie 和本地存储加载到一个隔离的浏览器上下文中。

对于页面状态,您可以使用:

  • --init-page 指向一个 TypeScript 文件,该文件将在 Playwright 的页面对象上执行。这使您可以运行任意代码来设置页面。
// init-page.ts
export default async ({ page }) => {
  await page.context().grantPermissions(['geolocation']);
  await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
  await page.setViewportSize({ width: 1280, height: 720 });
};
  • --init-script 指向一个 JavaScript 文件,该文件将作为初始化脚本添加。该脚本会在页面上的任何其他脚本之前被执行。这对于覆盖浏览器 API 或设置环境非常有用。
// init-script.js
window.isPlaywrightMCP = true;

配置文件

Playwright MCP 服务器可以通过 JSON 配置文件进行配置。你可以使用 --config 命令行选项指定配置文件:

npx @playwright/mcp@latest --config path/to/config.json
配置文件模式
{
  /**
   * 要使用的浏览器。
   */
  browser?: {
    /**
     * 要使用的浏览器类型。
     */
    browserName?: 'chromium' | 'firefox' | 'webkit';

    /**
     * 将浏览器配置文件保留在内存中,不将其保存到磁盘。
     */
    isolated?: boolean;

    /**
     * 浏览器配置文件持久化的用户数据目录路径。
     * 默认会创建一个临时目录。
     */
    userDataDir?: string;

    /**
     * 传递给以下方法的启动选项:
     * @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
     *
     * 这对于设置 `channel`、`headless`、`executablePath` 等选项非常有用。
     */
    launchOptions?: playwright.LaunchOptions;

    /**
     * 浏览器上下文的上下文选项。
     *
     * 这对于设置 `viewport` 等选项很有用。
     */
    contextOptions?: playwright.BrowserContextOptions;

    /**
     * 对于 Chromium 系列浏览器,用于连接现有浏览器实例的 Chrome DevTools 协议端点。
     */
    cdpEndpoint?: string;

    /**
     * 与连接请求一起发送的 CDP 头部。
     */
    cdpHeaders?: Record<string, string>;

    /**
     * 连接到 CDP 端点的超时时间,单位为毫秒。默认值为 30000 毫秒(30 秒)。传入 0 表示禁用超时。
     */
    cdpTimeout?: number;

    /**
     * 用于连接现有 Playwright 服务器的远程端点。
     */
    remoteEndpoint?: string;

    /**
     * 要作为 Playwright 页面初始化脚本添加的 TypeScript 文件路径。
     */
    initPage?: string[];

    /**
     * 要作为初始化脚本添加的 JavaScript 文件路径。
     * 这些脚本将在页面的所有脚本之前在每个页面上执行。
     */
    initScript?: string[];
  },

  /**
   * 连接到正在运行的浏览器实例(仅限 Edge/Chrome)。如果指定了此选项,则会忽略 `browser` 配置。
   * 需要安装“Playwright MCP Bridge”浏览器扩展程序。
   */
  extension?: boolean;

  server?: {
    /**
     * 用于 SSE 或 MCP 传输的监听端口。
     */
    port?: number;

    /**
     * 服务器绑定的主机。默认值为 localhost。使用 0.0.0.0 可以绑定到所有接口。
     */
    host?: string;

    /**
     * 此服务器允许服务的主机列表。默认值为服务器绑定的主机。
     * 这不是用于 CORS,而是用于 DNS 重绑定保护。
     */
    allowedHosts?: string[];
  },

  /**
   * 已启用工具功能列表。可能的值包括:
   *   - 'core': 核心浏览器自动化功能。
   *   - 'pdf': PDF 生成和操作。
   *   - 'vision': 基于坐标的交互。
   *   - 'devtools': 开发者工具功能。
   */
  capabilities?: ToolCapability[];

  /**
   * 是否将 Playwright 会话保存到输出目录。
   */
  saveSession?: boolean;

  /**
   * 在所有连接的 HTTP 客户端之间共享同一个浏览器上下文。
   */
  sharedBrowserContext?: boolean;

  /**
   * 密钥用于替换工具响应中的匹配明文,以防止 LLM 不小心获取敏感数据。这是一种便利措施,并非安全功能,请务必始终检查来自客户端的输入和工具输出的信息。
   */
  secrets?: Record<string, string>;

  /**
   * 用于保存输出文件的目录。
   */
  outputDir?: string;

  console?: {
    /**
     * 要返回的控制台消息级别。每个级别包含更严重级别的消息。默认值为 "info"。
     */
    level?: 'error' | 'warning' | 'info' | 'debug';
  },

  network?: {
    /**
     * 允许浏览器请求的源列表。默认情况下允许所有源。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。
     *
     * 支持的格式:
     * - 完整源:`https://example.com:8080` - 仅匹配该源
     * - 通配符端口:`http://localhost:*` - 匹配本地主机上任何端口的 http 协议
     */
    allowedOrigins?: string[];

    /**
     * 阻止浏览器请求的源列表。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。
     *
     * 支持的格式:
     * - 完整源:`https://example.com:8080` - 仅匹配该源
     * - 通配符端口:`http://localhost:*` - 匹配本地主机上任何端口的 http 协议
     */
    blockedOrigins?: string[];
  };

  /**
   * 指定用于测试 ID 的属性,默认为 "data-testid"。
   */
  testIdAttribute?: string;

  timeouts?: {
    /*
     * 配置默认操作超时:https://playwright.dev/docs/api/class-page#page-set-default-timeout。默认值为 5000 毫秒。
     */
    action?: number;

    /*
     * 配置默认导航超时:https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout。默认值为 60000 毫秒。
     */
    navigation?: number;

    /**
     * 配置默认 expect 超时:https://playwright.dev/docs/test-timeouts#expect-timeout。默认值为 5000 毫秒。
     */
    expect?: number;
  };

  /**
   * 是否向客户端发送图片响应。可选值为 "allow"、"omit" 或 "auto"。默认值为 "auto",即如果客户端能够显示图片则发送。
   */
  imageResponses?: 'allow' | 'omit';

  snapshot?: {
    /**
     * 在为响应拍摄快照时,指定要使用的模式。
     */
    mode?: 'full' | 'none';
  };

  /**
   * allowUnrestrictedFileAccess 作为一道护栏,防止 LLM 不小心超出其预期的工作空间。它是一种方便的防御机制,用于捕捉意外的文件访问行为,但并非安全边界;如果有意尝试访问其他目录,很容易绕过此限制,因此真正的安全性仍需依赖客户端级别的权限控制。
   */
  allowUnrestrictedFileAccess?: boolean;

  /**
   * 指定用于代码生成的语言。
   */
  codegen?: 'typescript' | 'none';
}

独立的 MCP 服务器

当在没有显示器的系统上或从 IDE 的工作进程运行带界面的浏览器时,应在具有 DISPLAY 环境的环境中运行 MCP 服务器,并传递 --port 标志以启用 HTTP 传输。

npx @playwright/mcp@latest --port 8931

然后在 MCP 客户端配置中,将 url 设置为 HTTP 端点:

{
  "mcpServers": {
    "playwright": {
      "url": "http://localhost:8931/mcp"
    }
  }
}

安全性

Playwright MCP 不是安全边界。有关保护您的部署的指导,请参阅 MCP 安全最佳实践

Docker

注意: 目前 Docker 实现仅支持无头 Chromium。

{
  "mcpServers": {
    "playwright": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
    }
  }
}

或者,如果您希望将容器作为长期运行的服务来启动,而不是让 MCP 客户端生成它,则可以使用以下命令:

docker run -d -i --rm --init --pull=always \
  --entrypoint node \
  --name playwright \
  -p 8931:8931 \
  mcr.microsoft.com/playwright/mcp \
  cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0

该服务器将在主机端口 8931 上监听,并可被任何 MCP 客户端访问。

您也可以自行构建 Docker 镜像:

docker build -t mcr.microsoft.com/playwright/mcp .
编程式使用
import http from 'http';

import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';

http.createServer(async (req, res) => {
  // ...

  // 创建一个带有 SSE 传输的无头 Playwright MCP 服务器
  const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
  const transport = new SSEServerTransport('/messages', res);
  await connection.connect(transport);

  // ...
});

工具

核心自动化
  • browser_click
    • 标题:点击
    • 描述:在网页上执行点击操作
    • 参数:
      • element(字符串,可选):用于获取与元素交互权限的人类可读元素描述
      • ref(字符串):页面快照中目标元素的确切引用
      • selector(字符串,可选):当无法使用“ref”时,用于定位目标元素的 CSS 或角色选择器
      • doubleClick(布尔值,可选):是否执行双击而非单击
      • button(字符串,可选):要点击的按钮,默认为左键
      • modifiers(数组,可选):要按下的修饰键
    • 只读:
  • browser_close
    • 标题:关闭浏览器
    • 描述:关闭页面
    • 参数:无
    • 只读:
  • browser_console_messages
    • 标题:获取控制台消息
    • 描述:返回所有控制台消息
    • 参数:
      • level(字符串):要返回的控制台消息级别。每个级别包含更严重级别的消息,默认为“info”。
      • all(布尔值,可选):是否返回自会话开始以来的所有控制台消息,而不仅仅是自上次导航以来的消息,默认为假。
      • filename(字符串,可选):用于保存控制台消息的文件名。如果未提供,则以文本形式返回消息。
    • 只读:
  • browser_drag
    • 标题:拖动鼠标
    • 描述:在两个元素之间执行拖放操作
    • 参数:
      • startElement(字符串):用于获取与源元素交互权限的人类可读描述
      • startRef(字符串):页面快照中源元素的确切引用
      • startSelector(字符串,可选):当无法使用“ref”时,用于定位源元素的 CSS 或角色选择器
      • endElement(字符串):用于获取与目标元素交互权限的人类可读描述
      • endRef(字符串):页面快照中目标元素的确切引用
      • endSelector(字符串,可选):当无法使用“ref”时,用于定位目标元素的 CSS 或角色选择器
    • 只读:
  • browser_evaluate
    • 标题:评估 JavaScript
    • 描述:在页面或元素上评估 JavaScript 表达式
    • 参数:
      • function(字符串):() => { /* 代码 / } 或 (element) => { / 代码 */ }(当提供元素时)
      • element(字符串,可选):用于获取与元素交互权限的人类可读描述
      • ref(字符串,可选):页面快照中目标元素的确切引用
      • selector(字符串,可选):当无法使用“ref”时,用于定位目标元素的 CSS 或角色选择器
      • filename(字符串,可选):用于保存结果的文件名。如果未提供,结果将以文本形式返回。
    • 只读:
  • browser_file_upload
    • 标题:上传文件
    • 描述:上传一个或多个文件
    • 参数:
      • paths(数组,可选):要上传文件的绝对路径。可以是单个文件或多个文件。如果省略,则取消文件选择对话框。
    • 只读:
  • browser_fill_form
    • 标题:填写表单
    • 描述:填写多个表单字段
    • 参数:
      • fields(数组):要填充的字段
    • 只读:
  • browser_handle_dialog
    • 标题:处理对话框
    • 描述:处理对话框
    • 参数:
      • accept(布尔值):是否接受对话框
      • promptText(字符串,可选):如果是提示对话框,则输入提示文本
    • 只读:
  • browser_hover
    • 标题:悬停鼠标
    • 描述:在页面上的元素上悬停
    • 参数:
      • element(字符串,可选):用于获取与元素交互权限的人类可读描述
      • ref(字符串):页面快照中目标元素的确切引用
      • selector(字符串,可选):当无法使用“ref”时,用于定位目标元素的 CSS 或角色选择器
    • 只读:
  • browser_navigate
    • 标题:导航到 URL
    • 描述:导航到指定的 URL
    • 参数:
      • url(字符串):要导航到的 URL
    • 只读:
  • browser_navigate_back
    • 标题:返回
    • 描述:返回到历史记录中的上一页
    • 参数:无
    • 只读:
  • browser_network_requests
    • 标题:列出网络请求
    • 描述:返回自页面加载以来的所有网络请求
    • 参数:
      • static(布尔值):是否包含成功的静态资源,如图片、字体、脚本等。默认为 false。
      • requestBody(布尔值):是否包含请求体。默认为 false。
      • requestHeaders(布尔值):是否包含请求头。默认为 false。
      • filter(字符串,可选):仅返回 URL 匹配此正则表达式的请求(例如:“/api/.*user”)。
      • filename(字符串,可选):用于保存网络请求的文件名。如果不提供,则以文本形式返回请求。
    • 只读:true
  • browser_press_key
    • 标题:按下按键
    • 描述:在键盘上按下某个键
    • 参数:
      • key(字符串):要按下的键名或要生成的字符,例如 ArrowLefta
    • 只读:false
  • browser_resize
    • 标题:调整浏览器窗口大小
    • 描述:调整浏览器窗口的宽度和高度
    • 参数:
      • width(数字):浏览器窗口的宽度
      • height(数字):浏览器窗口的高度
    • 只读:false
  • browser_run_code
    • 标题:运行 Playwright 代码
    • 描述:执行一段 Playwright 代码
    • 参数:
      • code(字符串,可选):包含 Playwright 代码的 JavaScript 函数,用于执行。该函数将被调用一次,传入一个参数 page,可用于与页面进行任何交互。例如:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }
      • filename(字符串,可选):从指定文件加载代码。如果同时提供了 code 和 filename,则会忽略 code。
    • 只读:false
  • browser_select_option
    • 标题:选择选项
    • 描述:在下拉菜单中选择一个选项
    • 参数:
      • element(字符串,可选):用于获取与元素交互权限的人类可读元素描述
      • ref(字符串):来自页面快照的精确目标元素引用
      • selector(字符串,可选):当没有“ref”时,用于定位目标元素的 CSS 或角色选择器
      • values(数组):要在下拉菜单中选择的值列表。可以是单个值,也可以是多个值。
    • 只读:false
  • browser_snapshot
    • 标题:页面快照
    • 描述:捕获当前页面的无障碍快照,这比截图更好
    • 参数:
      • filename(字符串,可选):将快照保存为 Markdown 文件,而不是在响应中返回。
      • selector(字符串,可选):用于捕获部分页面快照而非整个页面的根元素选择器
      • depth(数字,可选):限制快照树的深度
    • 只读:true
  • browser_take_screenshot
    • 标题:截取屏幕截图
    • 描述:截取当前页面的屏幕截图。你无法基于截图执行操作;若需执行操作,请使用 browser_snapshot。
    • 参数:
      • type(字符串):截图的图像格式。默认为 png。
      • filename(字符串,可选):保存截图的文件名。如果不指定,默认为 page-{timestamp}.{png|jpeg}。建议使用相对路径,以确保文件位于输出目录内。
      • element(字符串,可选):用于获取对特定元素进行截图权限的人类可读元素描述。如果未提供,则对视口进行截图。如果提供了 element,则必须同时提供 ref。
      • ref(字符串,可选):来自页面快照的精确目标元素引用。如果未提供,则对视口进行截图。如果提供了 ref,则必须同时提供 element。
      • selector(字符串,可选):当没有“ref”时,用于定位目标元素的 CSS 或角色选择器
      • fullPage(布尔值,可选):如果为 true,则截取整个可滚动页面的截图,而不是当前可见的视口。不能与针对特定元素的截图同时使用。
    • 只读:true
  • browser_type
    • 标题:输入文本
    • 描述:在可编辑元素中输入文本
    • 参数:
      • element(字符串,可选):用于获取与元素交互权限的人类可读元素描述
      • ref(字符串):来自页面快照的精确目标元素引用
      • selector(字符串,可选):当没有“ref”时,用于定位目标元素的 CSS 或角色选择器
      • text(字符串):要输入到元素中的文本
      • submit(布尔值,可选):是否提交输入的文本(输入后按 Enter 键)
      • slowly(布尔值,可选):是否逐字符输入。这对于触发页面中的按键处理程序很有用。默认是一次性输入全部文本。
    • 只读:false
  • browser_wait_for
    • 标题:等待
    • 描述:等待文本出现或消失,或者等待指定的时间过去
    • 参数:
      • time(数字,可选):等待的时间,单位为秒
      • text(字符串,可选):要等待出现的文本
      • textGone(字符串,可选):要等待消失的文本
    • 只读:false
标签页管理
  • browser_tabs
    • 标题:管理标签页
    • 描述:列出、创建、关闭或选择浏览器标签页。
    • 参数:
      • action(字符串):要执行的操作
      • index(数字,可选):标签页索引,用于关闭或选择。如果关闭时未指定索引,则关闭当前标签页。
      • url(字符串,可选):新标签页要导航到的 URL,用于新建标签页。
    • 只读:false
浏览器安装
配置(通过 --caps=config 开启)
  • browser_get_config
    • 标题:获取配置
    • 描述:获取在合并 CLI 选项、环境变量和配置文件后的最终解析配置。
    • 参数:无
    • 只读:true
网络功能(通过 --caps=network 开启)
  • browser_network_state_set
    • 标题: 设置网络状态
    • 描述: 将浏览器的网络状态设置为在线或离线。当处于离线状态时,所有网络请求都会失败。
    • 参数:
      • state (字符串): 设置为 "offline" 以模拟离线模式,设置为 "online" 以恢复网络连接
    • 只读:
  • browser_route
    • 标题: 模拟网络请求
    • 描述: 设置一个路由来模拟匹配特定 URL 模式的网络请求
    • 参数:
      • pattern (字符串): 要匹配的 URL 模式(例如:**/api/users**/*.{png,jpg}
      • status (数字,可选): 要返回的 HTTP 状态码(默认值:200)
      • body (字符串,可选): 响应体(文本或 JSON 字符串)
      • contentType (字符串,可选): Content-Type 头信息(例如:application/jsontext/html
      • headers (数组,可选): 以 "Name: Value" 格式添加的头部信息
      • removeHeaders (字符串,可选): 需要从请求中移除的头部名称列表,用逗号分隔
    • 只读:
  • browser_route_list
    • 标题: 列出网络路由
    • 描述: 列出所有当前激活的网络路由
    • 参数: 无
    • 只读:
  • browser_unroute
    • 标题: 移除网络路由
    • 描述: 移除与指定模式匹配的网络路由(如果没有指定模式,则移除所有路由)
    • 参数:
      • pattern (字符串,可选): 要取消路由的 URL 模式(省略则移除所有路由)
    • 只读:
存储功能(通过 --caps=storage 开启)
  • browser_cookie_clear
    • 标题: 清除所有 Cookie
    • 描述: 清除浏览器中的所有 Cookie
    • 参数: 无
    • 只读:
  • browser_cookie_delete
    • 标题: 删除指定 Cookie
    • 描述: 删除某个特定的 Cookie
    • 参数:
      • name (字符串): 要删除的 Cookie 名称
    • 只读:
  • browser_cookie_get
    • 标题: 获取指定 Cookie
    • 描述: 根据 Cookie 名称获取特定的 Cookie
    • 参数:
      • name (字符串): 要获取的 Cookie 名称
    • 只读:
  • browser_cookie_list
    • 标题: 列出所有 Cookie
    • 描述: 列出所有 Cookie(可选择按域名或路径过滤)
    • 参数:
      • domain (字符串,可选): 按域名过滤 Cookie
      • path (字符串,可选): 按路径过滤 Cookie
    • 只读:
  • browser_cookie_set
    • 标题: 设置 Cookie
    • 描述: 设置一个带有可选标志的 Cookie(域名、路径、过期时间、HttpOnly、Secure、SameSite)
    • 参数:
      • name (字符串): Cookie 名称
      • value (字符串): Cookie 值
      • domain (字符串,可选): Cookie 的域名
      • path (字符串,可选): Cookie 的路径
      • expires (数字,可选): Cookie 的过期时间,以 Unix 时间戳表示
      • httpOnly (布尔值,可选): 是否将 Cookie 设置为 HttpOnly
      • secure (布尔值,可选): 是否将 Cookie 设置为安全
      • sameSite (字符串,可选): Cookie 的 SameSite 属性
    • 只读:
  • browser_localstorage_clear
    • 标题: 清空 localStorage
    • 描述: 清空浏览器中的所有 localStorage 数据
    • 参数: 无
    • 只读:
  • browser_localstorage_delete
    • 标题: 删除 localStorage 中的一项
    • 描述: 删除 localStorage 中的某一项数据
    • 参数:
      • key (字符串): 要删除的键名
    • 只读:
  • browser_localstorage_get
    • 标题: 获取 localStorage 中的一项
    • 描述: 根据键名获取 localStorage 中的一项数据
    • 参数:
      • key (字符串): 要获取的键名
    • 只读:
  • browser_localstorage_list
    • 标题: 列出所有 localStorage 数据
    • 描述: 列出所有 localStorage 的键值对
    • 参数: 无
    • 只读:
  • browser_localstorage_set
    • 标题: 设置 localStorage 中的一项
    • 描述: 根据给定的键和值设置 localStorage 中的一项
    • 参数:
      • key (字符串): 要设置的键名
      • value (字符串): 要设置的值
    • 只读:
  • browser_sessionstorage_clear
    • 标题: 清空 sessionStorage
    • 描述: 清空浏览器中的所有 sessionStorage 数据
    • 参数: 无
    • 只读:
  • browser_sessionstorage_delete
    • 标题: 删除 sessionStorage 中的一项
    • 描述: 删除 sessionStorage 中的某一项数据
    • 参数:
      • key (字符串): 要删除的键名
    • 只读:
  • browser_sessionstorage_get
    • 标题: 获取 sessionStorage 中的一项
    • 描述: 根据键名获取 sessionStorage 中的一项数据
    • 参数:
      • key (字符串): 要获取的键名
    • 只读:
  • browser_sessionstorage_list
    • 标题: 列出所有 sessionStorage 数据
    • 描述: 列出所有 sessionStorage 的键值对
    • 参数: 无
    • 只读:
  • browser_sessionstorage_set
    • 标题: 设置 sessionStorage 中的一项
    • 描述: 根据给定的键和值设置 sessionStorage 中的一项
    • 参数:
      • key (字符串): 要设置的键名
      • value (字符串): 要设置的值
    • 只读:
  • browser_set_storage_state
    • 标题: 恢复存储状态
    • 描述: 从文件中恢复存储状态(Cookie、localStorage)。在恢复之前会清除现有的 Cookie 和 localStorage。
    • 参数:
      • filename (字符串): 要从中恢复存储状态的文件路径
    • 只读:
  • browser_storage_state
    • 标题: 保存存储状态
    • 描述: 将存储状态(Cookie、localStorage)保存到文件中,以便日后使用
    • 参数:
      • filename (字符串,可选): 保存存储状态的文件名。如果未指定,则默认为 storage-state-{timestamp}.json
    • 只读:
DevTools 功能(通过 --caps=devtools 开启)
  • browser_resume
    • 标题: 恢复已暂停的脚本执行
    • 描述: 在脚本被暂停后恢复执行。当 step 参数设置为 true 时,执行将在下一个操作之前再次暂停。
    • 参数:
      • step (布尔值,可选): 如果为 true, 执行将在下一个操作前再次暂停,以便进行逐步调试。
      • location (字符串,可选): 在指定的 <文件>:<行> 处暂停执行,例如 "example.spec.ts:42"
    • 只读: false
  • browser_start_tracing
    • 标题: 开始跟踪
    • 描述: 开始记录跟踪信息
    • 参数: 无
    • 只读: true
  • browser_start_video
    • 标题: 开始录制视频
    • 描述: 开始录制视频
    • 参数:
      • filename (字符串,可选): 保存视频的文件名。
      • size (对象,可选): 视频尺寸。
    • 只读: true
  • browser_stop_tracing
    • 标题: 停止跟踪
    • 描述: 停止记录跟踪信息
    • 参数: 无
    • 只读: true
  • browser_stop_video
    • 标题: 停止录制视频
    • 描述: 停止录制视频
    • 参数: 无
    • 只读: true
  • browser_video_chapter
    • 标题: 视频章节
    • 描述: 在视频录制中添加一个章节标记。显示带有模糊背景的全屏章节卡片。
    • 参数:
      • title (字符串): 章节标题
      • description (字符串,可选): 章节描述
      • duration (数字,可选): 显示章节卡片的持续时间(以毫秒为单位)
    • 只读: true
基于坐标的操作(通过 --caps=vision 开启)
  • browser_mouse_click_xy
    • 标题: 点击
    • 描述: 在指定位置点击鼠标按钮
    • 参数:
      • x (数字): X 坐标
      • y (数字): Y 坐标
      • button (字符串,可选): 要点击的按钮,默认为左键
      • clickCount (数字,可选): 点击次数,默认为 1 次
      • delay (数字,可选): 鼠标按下和松开之间的时间间隔(以毫秒为单位),默认为 0 毫秒
    • 只读: false
  • browser_mouse_down
    • 标题: 按下鼠标
    • 描述: 按下鼠标
    • 参数:
      • button (字符串,可选): 要按下的按钮,默认为左键
    • 只读: false
  • browser_mouse_drag_xy
    • 标题: 拖动鼠标
    • 描述: 将左键拖动到指定位置
    • 参数:
      • startX (数字): 起始 X 坐标
      • startY (数字): 起始 Y 坐标
      • endX (数字): 终点 X 坐标
      • endY (数字): 终点 Y 坐标
    • 只读: false
  • browser_mouse_move_xy
    • 标题: 移动鼠标
    • 描述: 将鼠标移动到指定位置
    • 参数:
      • x (数字): X 坐标
      • y (数字): Y 坐标
    • 只读: false
  • browser_mouse_up
    • 标题: 松开鼠标
    • 描述: 松开鼠标
    • 参数:
      • button (字符串,可选): 要松开的按钮,默认为左键
    • 只读: false
  • browser_mouse_wheel
    • 标题: 滚动鼠标滚轮
    • 描述: 滚动鼠标滚轮
    • 参数:
      • deltaX (数字): X 方向的滚动量
      • deltaY (数字): Y 方向的滚动量
    • 只读: false
PDF 生成(通过 --caps=pdf 开启)
  • browser_pdf_save
    • 标题: 另存为 PDF
    • 描述: 将页面保存为 PDF
    • 参数:
      • filename (字符串,可选): 保存 PDF 的文件名。如果未指定,则默认为 page-{timestamp}.pdf。建议使用相对路径,以确保文件保存在输出目录内。
    • 只读: true
测试断言(通过 --caps=testing 开启)
  • browser_generate_locator
    • 标题: 为元素创建定位器
    • 描述: 为给定元素生成定位器,用于测试中
    • 参数:
      • element (字符串,可选): 人类可读的元素描述,用于获取与该元素交互的权限
      • ref (字符串): 页面快照中目标元素的精确引用
      • selector (字符串,可选): 目标元素的 CSS 或角色选择器,当没有 ref 时使用
    • 只读: true
  • browser_verify_element_visible
    • 标题: 验证元素可见
    • 描述: 验证元素是否在页面上可见
    • 参数:
      • role (字符串): 元素的角色。可在快照中找到类似以下内容:- {ROLE} "Accessible Name":
      • accessibleName (字符串): 元素的可访问名称。可在快照中找到类似以下内容:- role "{ACCESSIBLE_NAME}"
    • 只读: false
  • browser_verify_list_visible
    • 标题: 验证列表可见
    • 描述: 验证列表是否在页面上可见
    • 参数:
      • element (字符串): 人类可读的列表描述
      • ref (字符串): 指向列表的精确元素引用
      • selector (字符串,可选): 目标列表的 CSS 或角色选择器,当没有 ref 时使用
      • items (数组): 要验证的列表项
    • 只读: false
  • browser_verify_text_visible
    • 标题: 验证文本可见
    • 描述: 验证文本是否在页面上可见。如果可能,建议优先使用 browser_verify_element_visible
    • 参数:
      • text (字符串): 要验证的文本。可在快照中找到类似以下内容:- role "Accessible Name": {TEXT}- text: {TEXT}
    • 只读: false
  • browser_verify_value
    • 标题: 验证元素值
    • 描述: 验证元素的值
    • 参数:
      • type (字符串): 元素的类型
      • element (字符串): 人类可读的元素描述
      • ref (字符串): 页面快照中目标元素的精确引用
      • selector (字符串,可选): 目标元素的 CSS 或角色选择器,当没有 ref 时使用
      • value (字符串): 要验证的值。对于复选框,使用 "true""false"
    • 只读: false

版本历史

v0.0.702026/04/01
v0.0.692026/03/30
v0.0.682026/02/14
v0.0.672026/02/14
v0.0.642026/02/06
v0.0.632026/02/04
v0.0.622026/01/31
v0.0.612026/01/26
v0.0.602026/01/26
v0.0.592026/01/25
v0.0.582026/01/24
v0.0.572026/01/24
v0.0.562026/01/16
v0.0.552026/01/09
v0.0.542025/12/29
v0.0.532025/12/20
v0.0.522025/12/11
v0.0.512025/12/08
v0.0.502025/12/05
v0.0.492025/11/30

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架

OpenHands

OpenHands 是一个专注于 AI 驱动开发的开源平台,旨在让智能体(Agent)像人类开发者一样理解、编写和调试代码。它解决了传统编程中重复性劳动多、环境配置复杂以及人机协作效率低等痛点,通过自动化流程显著提升开发速度。 无论是希望提升编码效率的软件工程师、探索智能体技术的研究人员,还是需要快速原型验证的技术团队,都能从中受益。OpenHands 提供了灵活多样的使用方式:既可以通过命令行(CLI)或本地图形界面在个人电脑上轻松上手,体验类似 Devin 的流畅交互;也能利用其强大的 Python SDK 自定义智能体逻辑,甚至在云端大规模部署上千个智能体并行工作。 其核心技术亮点在于模块化的软件智能体 SDK,这不仅构成了平台的引擎,还支持高度可组合的开发模式。此外,OpenHands 在 SWE-bench 基准测试中取得了 77.6% 的优异成绩,证明了其解决真实世界软件工程问题的能力。平台还具备完善的企业级功能,支持与 Slack、Jira 等工具集成,并提供细粒度的权限管理,适合从个人开发者到大型企业的各类用户场景。

70.6k|★★★☆☆|今天
语言模型Agent开发框架