by WJZ-P
gemini drawing MCP & skill through browser, can be used in openclaw or any agent that supports MCP. Gemini画图 MCP和sill,支持龙虾或任何agent使用
# Add to your Claude Code skills
git clone https://github.com/WJZ-P/gemini-skill与 Gemini 的一切交互,按以下优先级选择方式:
gemini_browser_info 获取 CDP 连接信息,主动连接到本 Skill 管理的浏览器进行操作。此方式必须先征得用户同意绝对禁止:自行启动新的浏览器实例访问 Gemini 页面(如使用 OpenClaw 浏览器、另起 Puppeteer 等),这会导致会话冲突。
浏览器 Daemon 未运行时 MCP 工具会自动拉起,无需任何手动操作。
MCP 工具调用(尤其是生图、等待回复等)可能耗时较长(60~180 秒)。必须遵守以下规则:
timeoutMs 必须设为 ≥180000(3 分钟),避免传输层提前超时截断。fullSize 模式失败,可降级重试 fullSize=false(预览图模式更稳定)。生图、画、绘图、海报、nano banana、nanobanana、image generation、生成图片本 Skill 通过 MCP Server 暴露工具,AI 直接调用即可。
浏览器启动、会话管理、图片提取、文件保存等流程已全部封装在工具内部。
AI 必须始终通过 MCP 工具完成所有操作。
禁止绕过 MCP 自行编写临时脚本(如
node -e "..."或创建.js临时文件)来import/require本项目导出的函数(如createGeminiSession、createOps等)。如果 MCP 工具确实无法满足当前需求,AI 必须先向用户说明原因并获得明确同意, 才能编写临时脚本调用底层 API。未经用户同意,一律禁止。
核心生图(封装完整流程):
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_generate_image | 完整生图流程:新建会话→发prompt→等待→提取图片→保存本地(耗时约 60~120 秒) | prompt,newSession(默认false),referenceImages(参考图路径数组),fullSize(默认true,高清原图;false则预览图),timeout(默认120000ms) |
会话管理:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_new_chat | 新建一个空白对话 | 无 |
| gemini_temp_chat | 进入临时对话模式(不保留历史记录) | 无 |
模型切换:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_switch_model | 切换 Gemini 模型 | model(pro / quick / think) |
文本对话:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_send_message | 发送文本消息并等待回答完成 | message,timeout(默认120000ms) |
图片操作:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_upload_images | 上传图片到输入框(仅上传不发送,可配合 send_message) | images(路径数组) |
| gemini_get_images | 获取会话中所有已加载图片的元信息 | 无 |
| gemini_extract_image | 提取指定图片的 base64 并保存到本地 | imageUrl(从 get_images 获取) |
| gemini_download_full_size_image | 下载完整尺寸的高清图片,默认最新一张,可指定索引 | index(可选,从0开始,从旧到新) |
文字回复提取:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_get_all_text_responses | 获取会话中所有文字回复(仅文字,不含图片) | 无 |
| gemini_get_latest_text_response | 获取最新一条文字回复 | 无 |
登录状态:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_check_login | 检查是否已登录 Google 账号 | 无 |
页面导航:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_navigate_to | 打开指定的 Gemini 页面 URL(如历史会话链接),仅允许 gemini.google.com 域名 | url(目标 URL),timeout(默认30000ms) |
诊断 & 恢复:
| 工具名 | 说明 | 入参 |
|--------|------|------|
| gemini_probe | 探测页面各元素状态(输入框、按钮、模型等) | 无 |
| gemini_reload_page | 刷新页面(卡住或异常时使用) | timeout(默认30000ms) |
| gemini_browser_info | 获取浏览器连接信息(CDP 端口、wsEndpoint 等) | 无 |
快速生图(一步到位):
gemini_generate_image,传入 prompt → 返回本地图片路径灵活组合(细粒度控制):
gemini_new_chat — 新建会话gemini_switch_model → pro — 切换到高质量模型gemini_upload_images — 上传参考图gemini_send_message — 发送描述词gemini_get_images → gemini_extract_image — 获取并保存图片排障:
gemini_probe — 看看页面元素有没有就位gemini_reload_page — 页面卡了就刷新gemini_browser_info — 获取 CDP 信息自行连接调试{
"mcpServers": {
"gemini": {
"command": "node",
"args": ["<项目绝对路径>/src/mcp-server.js"]
}
}
}
也可通过 npm run mcp 手动启动。
工具内部已包含重试逻辑。若仍然失败,返回值的 isError: true 和错误信息会告知原因:
npm run daemongemini_browser_info 查看浏览器状态排查references/gemini-flow.mdreferences/intent-routing.md「剥开了尖刺 却正如你曾经说
赖以生存的温柔只是白纸
盛着破碎的梦和我们的故事」
| | 功能 | 说明 | |:---:|------|------| | 🎨 | AI 生图 | 发送 prompt 自动生成图片,支持高清原图下载 | | 💬 | 文本对话 | 与 Gemini 进行多轮对话 | | 🖼️ | 图片上传 | 上传参考图片,基于参考图生成新图 | | 📥 | 图片提取 | 提取会话中的图片,支持 base64 和 CDP 完整尺寸下载 | | 🔄 | 会话管理 | 新建会话、临时会话、切换模型、导航到历史会话 | | 🧹 | 自动去水印 | 下载的图片自动移除 Gemini 水印 | | 🤖 | MCP Server | 标准 MCP 协议接口,可被任何 MCP 客户端调用 |
┌─────────────────────────────────────────────────────┐
│ MCP Client (AI) │
│ Claude / CodeBuddy / ... │
└──────────────────────┬──────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌─────────────────────────────────────────────────────┐
│ mcp-server.js (MCP 协议层) │
│ 注册所有 MCP 工具,编排调用流程 │
└──────────────────────┬──────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ index.js → browser.js (连接层) │
│ ensureBrowser() → 自动拉起 Daemon → CDP 直连 │
└──────────┬──────────────────────────────┬───────────┘
│ HTTP (acquire/status) │ WebSocket (CDP)
▼ ▼
┌──────────────────────┐ ┌─────────────────────────┐
│ Browser Daemon │ │ Chrome / Edge │
│ (独立后台进程) │───▶│ gemini.google.com │
│ daemon/server.js │ │ │
│ ├─ engine.js │ │ Stealth + 反爬检测 │
│ ├─ handlers.js │ └─────────────────────────┘
│ └─ lifecycle.js │
│ 30 分钟惰性销毁 │
└──────────────────────┘
核心设计理念:
puppeteer-extra-plugin-stealth 绕过网站检测mcp-server.js(协议层)→ gemini-ops.js(操作层)→ browser.js(连接层)→ daemon/(进程管理)BROWSER_PATH 指定路径)git clone https://github.com/WJZ-P/gemini-skill.git
cd gemini-skill
npm install
所有配置通过环境变量或 .env 文件设置。在项目根目录创建 .env 文件:
# 浏览器路径(不设则自动检测 Chrome/Edge/Chromium)
# BROWSER_PATH=C:\Program Files\Google\Chrome\Application\chrome.exe
# CDP 远程调试端口(默认 40821)
# BROWSER_DEBUG_PORT=40821
# 是否无头模式(默认 false,首次使用建议关闭以便登录)
# BROWSER_HEADLESS=false
# 图片输出目录(默认 ./gemini-image)
# OUTPUT_DIR=./gemini-image
# Daemon HTTP 端口(默认 40225)
# DAEMON_PORT=40225
# Daemon 闲置超时(毫秒,默认 30 分钟)
# DAEMON_TTL_MS=1800000
也支持 .env.development 文件(优先级高于 .env)。
配置优先级: process.env > .env.development > .env > 代码默认值
在 MCP 客户端配置文件中添加:
{
"mcpServers": {
"gemini": {
"command": "node",
"args": ["<项目绝对路径>/src/mcp-server.js"]
}
}
}
启动后 AI 即可通过 MCP 协议调用所有工具。
# 启动 MCP Server(stdio 模式,供 AI 客户端调用)
npm run mcp
# 单独启动 Browser Daemon(通常不需要,MCP 会自动拉起)
npm run daemon
# 运行 Demo 示例
npm run demo
import { createGeminiSession, disconnect } from './src/index.js';
const { ops } = await createGeminiSession();
// 生图
const result = await ops.generateImage('画一只可爱的猫咪', { fullSize: true });
console.log('图片保存至:', result.filePath);
// 用完断开(不关浏览器,由 Daemon 继续守护)
disconnect();
| 工具名 | 说明 | 主要参数 |
|--------|------|----------|
| gemini_generate_image | 完整生图流程(耗时 60~120s) | prompt, newSession, referenceImages, fullSize, timeout |
| 工具名 | 说明 | 主要参数 |
|--------|------|----------|
| gemini_new_chat | 新建空白对话 | 无 |
| gemini_temp_chat | 进入临时对话模式 | 无 |
| gemini_navigate_to | 导航到指定 Gemini URL(如历史会话) | url, timeout |
| 工具名 | 说明 | 主要参数 |
|--------|------|----------|
| gemini_switch_model | 切换模型(pro/quick/think) | model |
| gemini_send_message | 发送文本并等待回复(耗时 10~60s) | message, timeout |
| 工具名 | 说明 | 主要参数 |
|--------|------|----------|
| gemini_upload_images | 上传图片到输入框 | images |
| gemini_get_images | 获取会话中所有图片元信息 | 无 |
| gemini_extract_image | 提取图片 base64 并保存本地 | imageUrl |
| gemini_download_full_size_image | 下载完整尺寸高清图片 | index |
| 工具名 | 说明 | 主要参数 |
|--------|------|----------|
| gemini_get_all_text_responses | 获取所有文字回复 | 无 |
| gemini_get_latest_text_response | 获取最新一条文字回复 | 无 |
| 工具名 | 说明 | 主要参数 |
|--------|------|----------|
| gemini_check_login | 检查 Google 登录状态 | 无 |
| gemini_probe | 探测页面元素状态 | 无 |
| gemini_reload_page | 刷新页面 | timeout |
| gemini_browser_info | 获取浏览器连接信息 | 无 |
首次 MCP 调用
│
├─ Daemon 未运行 → 自动 spawn(detached + unref)
│ → 轮询等待就绪(最多 15s)
│
├─ GET /browser/acquire → 启动/复用浏览器 + 重置 30 分钟倒计时
│
├─ MCP 工具执行完毕 → disconnect()(断开 WebSocket,不关浏览器)
│
├─ 30 分钟内再次调用 → 重置倒计时(续命)
│
└─ 30 分钟无人使用 → 关闭浏览器 + 关闭 HTTP 服务 + 退出进程
(下次调用时自动重新拉起)
Daemon API 端点:
| 端点 | 说明 |
|------|------|
| GET /browser/acquire | 获取浏览器连接(会续命) |
| GET /browser/status | 查询浏览器状态(不续命) |
| POST /browser/release | 主动销毁浏览器 |
| GET /health | Daemon 健康检查 |
gemini-skill/
├── src/
│ ├── index.js # 统一入口
│ ├── mcp-server.js # MCP 协议服务(注册所有工具)
│ ├── gemini-ops.js # Gemini 页面操作(核心逻辑)
│ ├── operator.js # 底层 DOM 操作封装
│ ├── browser.js # 浏览器连接器(面向 Skill)
│ ├── config.js # 统一配置中心
│ ├── util.js # 工具函数
│ ├── watermark-remover.js # 图片去水印(基于 sharp)
│ ├── demo.js # 使用示例
│ ├── assets/ # 静态资源
│ └── daemon/ # Browser Daemon(独立进程)
│ ├── server.js # HTTP 微服务入口
│ ├── engine.js # 浏览器引擎(launch/connect/terminate)
│ ├── handlers.js # API 路由处理器
│ └── lifecycle.js # 生命周期控制(惰性销毁倒计时)
├── references/ # 参考文档
├── SKILL.md # AI 调用规范(MCP 客户端读取)
├── package.json
└── .env # 环境配置(需自行创建)
首次使用需登录 — 第一次运行时浏览器会打开 Gemini 页面,请手动完成 Google 账号登录。登录状态会保存在 userDataDir 中,后续无需重复登录。
不要同时运行多个实例 — 同一个 CDP 端口只能有一个浏览器实例,否则会端口冲突。
Windows Server 注意 — 已内置路径规范化和 Safe Browsing 绕过,但仍建议检查:
生图耗时较长 — 通常 60~120 秒,MCP 客户端的 timeoutMs 建议设为 ≥ 180000(3 分钟)。
该项目签署了 MIT 授权许可,详情请参阅 LICENSE
本项目支持 LINUX DO 社区
No comments yet. Be the first to share your thoughts!