gemini-image-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gemini-image-mcpgenerate a 16:9 cinematic 3D image of an astronaut cat"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gemini-image-mcp
MCP server cho AI Image Studio: agent vừa chạy service (bridge), vừa gọi API tạo ảnh — ảnh do Gemini sinh trong chính trình duyệt của bạn, kết quả trả về dưới dạng file.
MCP client (Claude Desktop / Cursor / VS Code)
│ stdio
▼
gemini-image-mcp ──► bridge (127.0.0.1) ──► trang studio trong trình duyệt ──► Gemini4 tool: bridge_status · bridge_start · bridge_stop · image_generate
Bắt đầu trong 3 bước
1. Thêm config vào MCP client
Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json;
Windows: %APPDATA%\Claude\claude_desktop_config.json):
{
"mcpServers": {
"gemini-image-mcp": {
"command": "npx",
"args": ["-y", "github:nguyennamkkb/gemini-image-mcp"]
}
}
}Cursor (~/.cursor/mcp.json) và VS Code (.vscode/mcp.json): cùng dạng mcpServers ở trên
(VS Code còn nhận {"servers": {…: {"type": "stdio", …}}}).
opencode — dùng 2 dòng ngắn (đừng dán 1 dòng dài, dễ bị xuống dòng làm github:… thành lệnh riêng):
SPEC=github:nguyennamkkb/gemini-image-mcp
opencode mcp add --global gemini-image-mcp -- npx -y $SPEC
opencode mcp list # phải thấy "✓ gemini-image-mcp connected" (lần đầu chờ ~10s cho npx tải)Hoặc viết tay vào ~/.config/opencode/opencode.json (toàn cục) hay opencode.json ở gốc project:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gemini-image-mcp": {
"type": "local",
"command": ["npx", "-y", "github:nguyennamkkb/gemini-image-mcp"],
"enabled": true,
"timeout": 30000
}
}
}Hai điểm bắt buộc phải biết cho opencode:
Đặt
timeout≥ 30000. Lần chạy đầunpxphải tải package (~9s đo thực tế), mà mặc định opencode chỉ chờ 5000ms để lấy danh sách tool → server hiệnpending/failed dù cấu hình đúng.opencode.jsonở gốc project chỉ được đọc khi thư mục đó là git workspace (ngoài git repo opencode báo "No MCP servers configured"). Muốn dùng mọi nơi thì thêm--globalnhư trên.Shape phẳng
"mcp": {"gemini-image-mcp": {…}}(như trên) và shape lồng"mcp": {"servers": {…}}(CLI v2 sinh ra) đều chạy — đã thử cả hai trên opencode 2.0.32.
Config trên luôn lấy bản mới nhất từ nhánh
main. Muốn cố định, thêm#v1.0.2(hoặc commit sha) vào sau tên repo, ví dụgithub:nguyennamkkb/gemini-image-mcp#v1.0.2.
2. Khởi động lại client (thoát hẳn rồi mở lại). Trong danh sách tool phải thấy đủ 4 tool ở trên.
3. Mở trang studio thành worker. Nhờ agent gọi bridge_start — nó trả về pageUrl
(dạng http://127.0.0.1:8765/?token=…). Mở link đó trong Chrome rồi để yên tab đấy.
Sau đó image_generate mới có worker để chạy.
Đang dùng Gemini Canvas (để Canvas cấp key Gemini) thì gọi
bridge_start {"allowCanvas": true}và mở trang studio trong tab Canvas — xem ràng buộc trình duyệt.
Related MCP server: Nano Banana
Workflow đang dùng: Gemini Canvas (1–1)
Cách dùng cố định của máy này — worker là tab Gemini Canvas, không phải tab local. Mọi thứ khác chạy tự động; đọc mục này trước khi sửa/nâng cấp để không đi lạc hướng.
opencode ──stdio──► gemini-image-mcp ──HTTP/WS──► bridge (127.0.0.1:8765)
▲
HTTP long-poll │ (Canvas cấm WebSocket)
│
tab Gemini Canvas (ai_image_studio.html) ──► Gemini
(Canvas tự cấp key — KHÔNG cần key trong trang)1. Config MCP (opencode.json ở gốc project)
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"gemini-image-mcp": {
"type": "local",
"command": ["npx", "-y", "github:nguyennamkkb/gemini-image-mcp"],
"enabled": true,
"timeout": 30000,
"environment": {
"AI_STUDIO_ALLOW_CANVAS": "true",
"AI_STUDIO_TOKEN": "aistudio-1-1-7f2c9d41b8e35a60"
}
}
}
}Dòng | Vì sao cần |
| Lần đầu |
| Bridge tự start (do |
| Token cố định để bridge ↔ trang bắt tay, không lệch khi file |
Giá trị cần dán vào tab Canvas (một lần, localStorage giữ mãi):
URL:
ws://127.0.0.1:8765/wsToken:
aistudio-1-1-7f2c9d41b8e35a60
Để trống ô token cũng được — trang tự dò qua
GET /api/discover(endpoint này trả token), nên hai bên luôn khớp kể cả khi bạn quên.
Nếu dùng Claude Code (.mcp.json) — cùng env nhưng tên key khác:
{
"mcpServers": {
"gemini-image-mcp": {
"command": "npx",
"args": ["-y", "github:nguyennamkkb/gemini-image-mcp"],
"env": { "AI_STUDIO_ALLOW_CANVAS": "true", "AI_STUDIO_TOKEN": "aistudio-1-1-7f2c9d41b8e35a60" }
}
}
}opencode | Claude Code | Ghi chú |
|
| key gốc — |
|
| |
|
| biến cho tiến trình server (đặt |
| — | Claude Code chỉnh bằng env |
2. Chrome phải tắt Local Network Access (Chrome 142+)
Trang Canvas là origin https://…usercontent.goog; Chrome 155 chặn nó gọi http://127.0.0.1
→ mọi cổng báo Failed to fetch. Bắt buộc mở Chrome kèm cờ:
# alias đã có trong ~/.zshrc:
alias chromedev='open -na "Google Chrome" --args --disable-features=LocalNetworkAccessChecks'
pkill -f "Google Chrome" # PHẢI thoát hẳn Chrome trước khi chạy chromedev
chromedev # dùng profile mặc định (giữ đăng nhập Google/Gemini)
# kiểm chứng cờ đã vào (kỳ vọng ≥1):
ps aux | grep "Contents/MacOS/Google Chrome" | grep -v grep | grep -c LocalNetworkAccessChecks3. Vận hành hằng ngày
chromedev→ mở lại tab Gemini Canvas chứaai_image_studio.html→ để yên tab đóGọi
image_generate {"prompt": "…"}từ opencode — bridge tự start, tự chờ worker, trảfilePathTab Canvas hiện
Đang tạo ảnh/ workerh_… HTTP long-polllà dấu hiệu đúng
Quy tắc bất di bất dịch
KHÔNG sửa
ai_image_studio.html. Bản trong tab Canvas là bản bạn đã dán; sửa file trong repo sẽ làm lệch hai bên và gây nhầm lẫn. Mọi bản vá nằm ởbridge/+mcp/.Ngoại lệ đã chấp nhận (1.0.9): ô token trong panel "Cấu hình API local" đổi
type="password"→type="text"để nhìn thấy token cố định cho tiện đối chiếu hai bên. Đây là token local (loopback + origin policy), không phải khoá Gemini. Sửa trên do người dùng chủ động; tab Canvas muốn thấy y hệt thì dán lạiai_image_studio.htmlmới vào Canvas một lần.
Không cần key Gemini trong trang (Canvas cấp) và không cần dán token (tự dò).
Chỉ cần 1 worker (tab Canvas). Bridge ở chế độ canvas không mở tab local nữa, nên không có chuyện job rơi vào tab không key (xem bảng sự cố bên dưới).
4. Nâng cấp lên bản mới (repo không dùng tag, luôn theo main)
# phía repo (người phát hành):
# 1) sửa code → 2) tăng "version" trong package.json → 3) commit & push main
git commit -am "..." && git push origin main
# phía máy dùng (bắt buộc, nếu không npx vẫn dùng bản cũ đã cache):
rm -rf ~/.npm/_npx/*/node_modules/gemini-image-mcp ~/.npm/_npx/<hash>
# rồi thoát hẳn opencode và mở lại → npx tải bản mớiKiểm tra đang chạy bản nào:
opencode mcp list # phải thấy ✓ gemini-image-mcp connected
# trong phiên: gọi bridge_status {} → "version" của bridge
# initialize (client tự gọi) → serverInfo.version = version trong package.json
python3 -c "import json;print(json.load(open('$(ls -d ~/.npm/_npx/*/node_modules/gemini-image-mcp/package.json | head -1)'))['version'])"Muốn cố định một bản thay vì theo main: thêm #<commit-sha> sau tên repo trong command.
5. Sự cố thường gặp (đã gặp thật, kèm cách sửa)
Triệu chứng | Nguyên nhân | Cách sửa |
Trang Canvas: mọi cổng | Chrome chặn LNA (142+) | Thoát hẳn Chrome → |
| Bridge chạy thiếu | Từ 1.0.5: |
| Tab local ( | Từ 1.0.6: bridge chế độ canvas không mở tab local → đóng tab local nếu còn mở |
| Tab Canvas chưa mở/chưa bấm "Thử lại" |
|
Server |
| Sửa |
Bridge start nhưng token lệch với trang | Token ngẫu nhiên bị sinh lại (xoá | Dùng |
Dừng dịch vụ khi cần: bridge_stop {"port": 8765} (chỉ kill khi /api/status xác nhận đúng bridge).
Dùng
bridge_status {} → bridge nào đang chạy, worker nào nối, link mở trang
bridge_start {"allowCanvas": true} → chạy service nền, trả pageUrl + pid + logFile
image_generate {"prompt":"mèo phi hành gia, 3D cinematic","aspectRatio":"16:9"}
image_generate {"prompt":"biến thể lúc hoàng hôn","refImagePath":"/tmp/in.png","inline":true}
bridge_stop {"port":8765} → dừng bridge (chỉ kill khi /api/status xác nhận đúng bridge)image_generate trả về {ok, filePath, bytes, mime, aspectRatio, tookMs, workerId}; đặt
inline:true để kèm luôn ảnh vào kết quả cho client hiển thị.
Dữ liệu lưu ở đâu
Đường dẫn | Nội dung |
| Ảnh tạo ra khi client chạy trong một project (opencode/Cursor/VS Code spawn MCP server với |
| Ảnh tạo ra khi không xác định được project (ví dụ Claude Desktop) |
| Token bí mật để local API/bridge xác thực (sinh tự động, quyền |
| Log của bridge do MCP chạy nền |
| pid/port của bridge mà MCP đã chạy (để |
Hai biến môi trường để đổi chỗ lưu (thêm vào "env" trong config nếu cần):
Biến | Mặc định | Ý nghĩa |
|
| Token, log, state của bridge |
| (tự chọn theo project) | Ép nơi lưu ảnh, ghi đè cả quy tắc theo project |
| (tắt) |
|
| (trống) | Chèn thêm tham số cho bridge tự start, ví dụ |
| (tự sinh) | Token cố định để bridge ↔ trang studio bắt tay (thay vì token ngẫu nhiên sinh một lần rồi lưu ở |
Ảnh lưu vào đâu
Thứ tự ưu tiên (cao → thấp), mỗi kết quả image_generate đều trả filePath + outputDir + outputSource để biết vì sao:
savePath— đường dẫn file chính xác truyền trong lệnh.outputDir— thư mục truyền trong lệnh (tự đặt tên file).AI_STUDIO_OUTPUT— biến môi trường.<project đang gọi tool>/generated-images— khicwdcủa server là một project (có.git/package.json).~/Pictures/ai-image-studio— khi không xác định được project.
Muốn ảnh luôn vào project hiện tại khi dùng opencode thì không cần làm gì thêm (nó spawn server ở gốc
workspace). Muốn đổi chỗ khác thì đặt AI_STUDIO_OUTPUT trong "environment"/"env" của config.
Yêu cầu
Node ≥ 20 (MCP server + bridge đều zero-dependency ngoài SDK chính thức).
Một trang studio đang mở làm worker: hoặc mở link bridge (
pageUrl) trong Chrome, hoặc dánai_image_studio.htmlvào Gemini Canvas (Canvas cấp key Gemini nên không cần API key).
Vì sao phải có trang studio mở
Ảnh do Gemini sinh trong trình duyệt (Canvas tự inject key), nên luôn cần ít nhất một worker là
trang ai_image_studio.html đang mở. Trình duyệt cũng chặn khá nhiều đường về máy local, và bridge
đã xử lý từng trường hợp:
Trang chạy ở | Rào cản | Cách dùng |
| không có | Mở link, xong. WebSocket chạy luôn |
Tab Gemini Canvas | Canvas cấm |
|
Origin khác (host LAN, https khác) | như trên, và phải khai báo origin |
|
Chi tiết + bằng chứng đo được: bridge/README.md. MCP: mcp/README.md.
Phát triển
npm install
npm run smoke # handshake + tools/list + bridge_status + kiểm tra đường dẫn
npm run smoke -- --with-service # thêm vòng đời start → status → stop
npm run smoke -- --with-image # thêm tạo ảnh thật (cần worker đang mở)
npm pack # gói phát hành, kiểm tra nội dung .tgzCấu trúc:
Đường dẫn | Vai trò |
| MCP server (stdio) + 4 tool |
| Test qua stdio JSON-RPC thật |
| Bridge: WS hub + HTTP API + HTTP long-poll cho Canvas |
| Trang studio (UI + client bridge) |
Phát hành bản mới
Không dùng tag — người dùng luôn lấy bản mới nhất từ main:
Sửa code, tăng
versiontrongpackage.json(version này được MCP trả tronginitializenên kiểm tra được đang chạy bản nào).git commit && git push origin mainNgười dùng chạy lại client là xong (
npxsẽ lấy bản mới). Ai muốn cố định thì pingithub:nguyennamkkb/gemini-image-mcp#<commit-sha>.
Các tag cũ (v1.0.0 → v1.0.2) vẫn còn trên remote để ai đang pin thì không gãy; xoá bằng
git push origin :refs/tags/v1.0.0 nếu không muốn giữ.
License
MIT — xem LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Image and video AI tools and your own pipelines, run from any AI assistant.
LLM chat, text tools, image generation, editing, batch image jobs, and asynchronous video generation
Generate images, GIFs, videos, and PDFs from HTML, URLs, or templates — from your AI agent.
Generate, edit and upscale images with references, batch jobs, cost previews and original downloads.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI agents to generate, edit, and analyze images using Google's Gemini image generation models including Nano Banana Pro (gemini-3-pro-image-preview).124 npm18MIT
- AlicenseBqualityDmaintenanceEnables image generation using Google Gemini models like Gemini 2.0 Flash and Imagen 3.0 with support for custom aspect ratios and negative prompts. It also allows users to list and manage generated images stored in local directories.219 npmMIT
- AlicenseAqualityDmaintenanceProvides image generation, modification, and analysis capabilities using Google's Gemini API, enabling AI-powered image operations through natural language.57 npmMIT
- FlicenseAqualityBmaintenanceEnables agents to generate images through the GPT Image Playground via a browser extension, supporting task submission, status tracking, and downloading generated images with reference image support.31-