Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Generate and edit images with Google Gemini (Nano Banana / Nano Banana Pro) image models.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
GEMINI_API_KEY, GEMINI_IMAGE_MODEL, GEMINI_OUTPUT_DIR, GEMINI_INPUT_DIR, GEMINI_UPLOAD_DIR, GEMINI_REFERENCE_DIR, GEMINI_TIMEOUT_MS, GEMINI_HEARTBEAT_MS, GEMINI_CHAIN_RETRY_MS, GEMINI_DEBUG, GEMINI_RATE_CARDค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"gemini": {
"command": "npx",
"args": [
"-y",
"@chrischall/gemini-mcp"
],
"env": {
"GEMINI_API_KEY": "ใส่ค่าของคุณ",
"GEMINI_IMAGE_MODEL": "ใส่ค่าของคุณ",
"GEMINI_OUTPUT_DIR": "ใส่ค่าของคุณ",
"GEMINI_INPUT_DIR": "ใส่ค่าของคุณ",
"GEMINI_UPLOAD_DIR": "ใส่ค่าของคุณ",
"GEMINI_REFERENCE_DIR": "ใส่ค่าของคุณ",
"GEMINI_TIMEOUT_MS": "ใส่ค่าของคุณ",
"GEMINI_HEARTBEAT_MS": "ใส่ค่าของคุณ",
"GEMINI_CHAIN_RETRY_MS": "ใส่ค่าของคุณ",
"GEMINI_DEBUG": "ใส่ค่าของคุณ",
"GEMINI_RATE_CARD": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add gemini --env GEMINI_API_KEY='ใส่ค่าของคุณ' --env GEMINI_IMAGE_MODEL='ใส่ค่าของคุณ' --env GEMINI_OUTPUT_DIR='ใส่ค่าของคุณ' --env GEMINI_INPUT_DIR='ใส่ค่าของคุณ' --env GEMINI_UPLOAD_DIR='ใส่ค่าของคุณ' --env GEMINI_REFERENCE_DIR='ใส่ค่าของคุณ' --env GEMINI_TIMEOUT_MS='ใส่ค่าของคุณ' --env GEMINI_HEARTBEAT_MS='ใส่ค่าของคุณ' --env GEMINI_CHAIN_RETRY_MS='ใส่ค่าของคุณ' --env GEMINI_DEBUG='ใส่ค่าของคุณ' --env GEMINI_RATE_CARD='ใส่ค่าของคุณ' -- npx -y @chrischall/gemini-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"gemini": {
"command": "npx",
"args": [
"-y",
"@chrischall/gemini-mcp"
],
"env": {
"GEMINI_API_KEY": "ใส่ค่าของคุณ",
"GEMINI_IMAGE_MODEL": "ใส่ค่าของคุณ",
"GEMINI_OUTPUT_DIR": "ใส่ค่าของคุณ",
"GEMINI_INPUT_DIR": "ใส่ค่าของคุณ",
"GEMINI_UPLOAD_DIR": "ใส่ค่าของคุณ",
"GEMINI_REFERENCE_DIR": "ใส่ค่าของคุณ",
"GEMINI_TIMEOUT_MS": "ใส่ค่าของคุณ",
"GEMINI_HEARTBEAT_MS": "ใส่ค่าของคุณ",
"GEMINI_CHAIN_RETRY_MS": "ใส่ค่าของคุณ",
"GEMINI_DEBUG": "ใส่ค่าของคุณ",
"GEMINI_RATE_CARD": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"gemini": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@chrischall/gemini-mcp"
],
"env": {
"GEMINI_API_KEY": "ใส่ค่าของคุณ",
"GEMINI_IMAGE_MODEL": "ใส่ค่าของคุณ",
"GEMINI_OUTPUT_DIR": "ใส่ค่าของคุณ",
"GEMINI_INPUT_DIR": "ใส่ค่าของคุณ",
"GEMINI_UPLOAD_DIR": "ใส่ค่าของคุณ",
"GEMINI_REFERENCE_DIR": "ใส่ค่าของคุณ",
"GEMINI_TIMEOUT_MS": "ใส่ค่าของคุณ",
"GEMINI_HEARTBEAT_MS": "ใส่ค่าของคุณ",
"GEMINI_CHAIN_RETRY_MS": "ใส่ค่าของคุณ",
"GEMINI_DEBUG": "ใส่ค่าของคุณ",
"GEMINI_RATE_CARD": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
GEMINI_IMAGE_MODEL envGEMINI_OUTPUT_DIR envGEMINI_INPUT_DIR envGEMINI_UPLOAD_DIR envGEMINI_REFERENCE_DIR envGEMINI_TIMEOUT_MS envGEMINI_HEARTBEAT_MS envGEMINI_CHAIN_RETRY_MS envGEMINI_DEBUG envGEMINI_RATE_CARD envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub chrischall ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: GEMINI_API_KEY
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (2.5.0) เข้า registry วันนี้
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Figma Context MCP, Claude Real Video, Figma MCP Server
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Let any LLM watch a video locally — and search everything it has ever watched.
server ทางการของ Figma ส่งข้อมูลงานออกแบบให้ AI อ่าน เพื่อเปลี่ยนแบบเป็นโค้ดหรืออธิบายแบบได้ตรงขึ้น ต่อผ่านคลาวด์ของ Figma
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
MCP server for Google Gemini media generation. Exposes thirteen tools to Claude over stdio: list available models, generate/edit/compose images, generate a consistent set of images from a master prompt, multi-turn image refinement (Interactions API), video generation (omni), music generation (Lyria), an async result poll for long generations, and Files API upload/list/delete for reusable image references. Output is written to disk by default (path returned) or returned inline as base64. Built on the Gemini v1beta API (generativelanguage.googleapis.com) using the Nano Banana / Nano Banana Pro (images), omni (video), and Lyria (music) model families.
Developed and maintained by AI (Claude Code).
| Variable | Required | Description |
|---|---|---|
GEMINI_API_KEY | Yes | Your Google Gemini API key (aistudio.google.com/apikey) |
GEMINI_IMAGE_MODEL | No | Override the default image model (default: gemini-nano-banana-2.1) |
GEMINI_OUTPUT_DIR | No | Default directory for generated images (default: ~/Downloads/gemini-mcp). When set, a per-call output_dir must be inside it. |
GEMINI_INPUT_DIR | No | Directory to resolve bare input-image filenames against (so images: ["foo.jpg"] works) |
GEMINI_UPLOAD_DIR | No | Restrict local files streamed to the Gemini Files API (gemini_upload_file path, video_path) to these directories — one or more, separated by : (; on Windows); ~ allowed. A path outside is refused before any upload. Unset: no restriction |
GEMINI_REFERENCE_DIR | No | Restrict local reference images (the images / master_images paths read and sent to Gemini — inline, or as a Files API upload once reused) to these directories — :-separated (; on Windows), ~ allowed; GEMINI_OUTPUT_DIR is always allowed too, so generated images can be fed back in. A path outside (symlinks followed) is refused before it is read. Unset: GEMINI_UPLOAD_DIR applies instead. If both are unset, reference images are unrestricted on a local install (any file the server can read can be sent), and confined to $MCP_DATA_DIR/uploads when MCP_DATA_DIR is set (hosted) |
GEMINI_TIMEOUT_MS | No | Upstream request timeout in ms (default: 60000, or 120000 for image_size: "4K"); each generation tool also takes a per-call timeout_ms |
GEMINI_HEARTBEAT_MS | No | Progress-notification cadence in ms while a generation runs (default: 10000; 0 disables) — keeps MCP hosts that reset their timeout on progress from timing out long generations |
GEMINI_CHAIN_RETRY_MS | No | How long to wait out interactions-store lag when a chained call 404s (default: 120000; 0 disables retrying) |
Sending a local file to Google (the images / master_images / video_path inputs, or gemini_upload_file's path) and every delete ask for confirmation first. A client that can show a confirmation prompt (Claude Code) gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. Elsewhere the first call does nothing and returns a preview (the resolved local paths with their MIME types and sizes, or the method/path being deleted) plus a confirmToken; only a repeat call with the same arguments and that token proceeds. The token is single-use, expires, and is bound to the exact arguments — a changed prompt or a swapped file between the two calls is refused. Pure text prompts, URLs, files/ references and base64 inputs are not gated.
| variable | default | |
|---|---|---|
MCP_CONFIRM_MODE | ask-user | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse. |
MCP_CONFIRM_ELICITATION | on | off never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE path. Set it for a client that claims to support prompts but never shows one (the gated call hangs — opencode 2.0.x). Any other value stays on, with a warning on stderr. |
MCP_CONFIRM_TTL_SECONDS | 600 | How long a token stays valid. |
MCP_CONFIRM_SECRET | random per process | Signing key; set it only if tokens must survive a server restart. |
4K / Pro-model generations can outrun an MCP host's own tools/call timeout (error -32001). The server sends notifications/progress heartbeats so hosts that reset their timeout on progress wait it out. If the host still gives up, the server-side generation usually completes anyway: the image is written to the output dir, gemini_interact also writes an .json sidecar recording the interaction_id, and continue_last: true resumes the interaction the lost response belonged to.
A 404 on a request carrying previous_interaction_id is not proof the chain expired. The only 404 body observed live is generic — "Requested entity was not found." — and never names *which* entity. An unknown or renamed model id, and an expired Files API `files/…` uri (~48h TTL), return exactly the same thing. So the server no longer asserts a cause it can't establish: the upstream text is surfaced verbatim, and gemini_interact runs an experiment to find out which it was.
Most often the id isn't missing at all — it just isn't *visible* yet. The interactions store is eventually consistent, and a freshly created id can 404 while the same id resolves fine minutes later; heavy turns (4K, Pro, thinking_level: high) are the likeliest to hit it, which is exactly the turn you most want to chain from. So a chained 404 is retried with exponential backoff for up to 120s (GEMINI_CHAIN_RETRY_MS) before anything is declared broken. The 404 generates nothing and isn't billed, so the wait costs only time.
After that budget is spent, the tool looks up that id's sidecar, re-attaches the image it produced, and re-issues the request without the chain:
chain_recovered: { expired_interaction_id, reanchored_on }. The 404'd attempt generates nothing, so this costs the one generation you'd have paid for re-anchoring manually.files/… uri instead of being sent to chase an interaction that was fine all along.Separately, continue_last no longer dies with the server process: with no in-memory id it resumes from the newest .json sidecar in the output dir and reports continued_from_sidecar: true. That case was never an expired chain at all — the interaction was alive upstream the whole time; only our memory of its id was gone.
For hosts whose timeout can't be tamed (e.g. Claude Desktop, a fixed ~30s cap that ignores progress), two guards make re-issuing safe and unnecessary:
job_id immediately instead of the image, so the call can't time out at all; poll gemini_get_result with the job_id until it's done.reused: true) instead of billing a second generation. (Even without a key, two identical in-flight calls are deduplicated automatically.)| Tool | Description |
|---|---|
gemini_list_models | List available Gemini image models and the current default |
gemini_image_generate | Generate image(s) from a text prompt |
gemini_image_edit | One-off edits or multi-image composition with a text instruction (for a series of edits, use gemini_interact) |
gemini_image_set | Generate a master image plus N consistent images referencing it |
gemini_interact | Preferred tool for iterative refinement: multi-turn generation/editing via the Interactions API — chain the returned interaction_id via previous_interaction_id (or continue_last: true) |
gemini_video_generate | Generate a short video (text→video, image→video, two-still interpolation, edit or extend) via the Gemini omni model; resolution 360p/720p/1080p/4k is the cost lever; written to disk as MP4 |
gemini_music_generate | Generate music from a text prompt via a Lyria model — lyria-3-clip-preview (30s, default), lyria-3.5 (full-length, vocals) or lyria-3-pro-preview; single-turn; written to disk as MP3 |
gemini_get_result | Fetch an async generation started with async: true by its job_id (status running → done result). Lets a long generation outlive a host's tools/call timeout |
gemini_token_usage | Token usage and an estimated USD cost for this session so far. Call it before and after a workflow and subtract to attribute that workflow's spend. Priced per call against each call's own model from a dated rate card (GEMINI_RATE_CARD overrides it); there is no account-balance endpoint to read, so this is how spend is attributed |
gemini_upload_file | Upload an image (or video/audio) to the Gemini Files API once — from a url, data_base64, or a local path — and get a reusable files/ reference |
gemini_list_files | List the files currently uploaded under this API key, with MIME types and expiry times |
gemini_delete_file | Delete an uploaded file before its ~48h expiry (confirmed first — see Confirmations) |
gemini_sign_media | *(hosted deployments only)* Mint a fresh signed URL for generated media from its r2_key — an expired link is not a dead end |
gemini_view_media | *(hosted deployments only)* Return a generated image as an inline image block from its r2_key, so a model can actually see what it made before refining it |
gemini_get_upload_url | *(hosted deployments only)* Mint a short-lived signed PUT URL so a shell can upload a reference image with no auth header; the PUT returns an r2_key usable in images_r2_keys, gemini_save_character, or gemini_upload_file |
gemini_save_character / gemini_list_characters / gemini_delete_character | *(hosted deployments only)* Persistent per-account character library: save a reference image + description under a name, then pass characters: ["name"] on generation tools. No expiry |
gemini_save_style / gemini_list_styles / gemini_delete_style | *(hosted deployments only)* Persistent per-account style presets: a reusable prompt fragment (optionally with a reference image), applied by passing style: "name" on generation tools. No expiry |
Generation tools also share three throughput/latency controls: async: true (return a job_id immediately), max_wait_ms (wait up to a budget, then hand back the job_id — fast results stay in-band, slow batches never trip the host timeout), and idempotency_key (a retry returns the recorded result instead of re-billing). On a hosted deployment, a gemini_image_set result with more than one image also carries a `bundle_url` — one sig
ตัดมาแค่ช่วงต้น อ่านต่อใน repo