Figma Context MCP
Give your coding agent access to your Figma data. Implement designs in any framework in one-shot.
Description from the maker (original English)
MCP server for AI image generation via OpenAI, Stable Diffusion (SD WebUI), or placeholders.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
IMAGE_GENERATION_MCP_KV_STORE_URL, IMAGE_GENERATION_MCP_TOOLS_ALLOW, IMAGE_GENERATION_MCP_TOOLS_DENY, IMAGE_GENERATION_MCP_SERVER_NAME, IMAGE_GENERATION_MCP_INSTRUCTIONS, FASTMCP_LOG_LEVEL, FASTMCP_ENABLE_RICH_LOGGING, IMAGE_GENERATION_MCP_A1111_HOST, IMAGE_GENERATION_MCP_A1111_MODEL, IMAGE_GENERATION_MCP_READ_ONLY, IMAGE_GENERATION_MCP_SCRATCH_DIR, IMAGE_GENERATION_MCP_OPENAI_API_KEY, IMAGE_GENERATION_MCP_GOOGLE_API_KEY, IMAGE_GENERATION_MCP_SD_WEBUI_HOST, IMAGE_GENERATION_MCP_SD_WEBUI_MODEL, IMAGE_GENERATION_MCP_DEFAULT_PROVIDER, IMAGE_GENERATION_MCP_TRANSFORM_CACHE_SIZE, IMAGE_GENERATION_MCP_PAID_PROVIDERS, IMAGE_GENERATION_MCP_STYLES_DIR, IMAGE_GENERATION_MCP_ALLOW_LOCAL_FILE_INPUT, IMAGE_GENERATION_MCP_MAX_INPUT_IMAGE_BYTES, IMAGE_GENERATION_MCP_FETCH_TIMEOUT_S, IMAGE_GENERATION_MCP_TRANSFER_TTL_DEFAULT_S, IMAGE_GENERATION_MCP_TRANSFER_TTL_MAX_S, IMAGE_GENERATION_MCP_TRANSFER_GRACE_TTL_S, IMAGE_GENERATION_MCP_TRANSFER_LEASE_S, IMAGE_GENERATION_MCP_TRANSFER_MAX_UPLOAD_BYTESValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"image-generation": {
"command": "uvx",
"args": [
"image-generation-mcp"
],
"env": {
"IMAGE_GENERATION_MCP_KV_STORE_URL": "your-value",
"IMAGE_GENERATION_MCP_TOOLS_ALLOW": "your-value",
"IMAGE_GENERATION_MCP_TOOLS_DENY": "your-value",
"IMAGE_GENERATION_MCP_SERVER_NAME": "your-value",
"IMAGE_GENERATION_MCP_INSTRUCTIONS": "your-value",
"FASTMCP_LOG_LEVEL": "your-value",
"FASTMCP_ENABLE_RICH_LOGGING": "your-value",
"IMAGE_GENERATION_MCP_A1111_HOST": "your-value",
"IMAGE_GENERATION_MCP_A1111_MODEL": "your-value",
"IMAGE_GENERATION_MCP_READ_ONLY": "your-value",
"IMAGE_GENERATION_MCP_SCRATCH_DIR": "your-value",
"IMAGE_GENERATION_MCP_OPENAI_API_KEY": "your-value",
"IMAGE_GENERATION_MCP_GOOGLE_API_KEY": "your-value",
"IMAGE_GENERATION_MCP_SD_WEBUI_HOST": "your-value",
"IMAGE_GENERATION_MCP_SD_WEBUI_MODEL": "your-value",
"IMAGE_GENERATION_MCP_DEFAULT_PROVIDER": "your-value",
"IMAGE_GENERATION_MCP_TRANSFORM_CACHE_SIZE": "your-value",
"IMAGE_GENERATION_MCP_PAID_PROVIDERS": "your-value",
"IMAGE_GENERATION_MCP_STYLES_DIR": "your-value",
"IMAGE_GENERATION_MCP_ALLOW_LOCAL_FILE_INPUT": "your-value",
"IMAGE_GENERATION_MCP_MAX_INPUT_IMAGE_BYTES": "your-value",
"IMAGE_GENERATION_MCP_FETCH_TIMEOUT_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_TTL_DEFAULT_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_TTL_MAX_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_GRACE_TTL_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_LEASE_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_MAX_UPLOAD_BYTES": "your-value"
}
}
}
}Run this in your terminal
claude mcp add image-generation --env IMAGE_GENERATION_MCP_KV_STORE_URL=your-value --env IMAGE_GENERATION_MCP_TOOLS_ALLOW=your-value --env IMAGE_GENERATION_MCP_TOOLS_DENY=your-value --env IMAGE_GENERATION_MCP_SERVER_NAME=your-value --env IMAGE_GENERATION_MCP_INSTRUCTIONS=your-value --env FASTMCP_LOG_LEVEL=your-value --env FASTMCP_ENABLE_RICH_LOGGING=your-value --env IMAGE_GENERATION_MCP_A1111_HOST=your-value --env IMAGE_GENERATION_MCP_A1111_MODEL=your-value --env IMAGE_GENERATION_MCP_READ_ONLY=your-value --env IMAGE_GENERATION_MCP_SCRATCH_DIR=your-value --env IMAGE_GENERATION_MCP_OPENAI_API_KEY=your-value --env IMAGE_GENERATION_MCP_GOOGLE_API_KEY=your-value --env IMAGE_GENERATION_MCP_SD_WEBUI_HOST=your-value --env IMAGE_GENERATION_MCP_SD_WEBUI_MODEL=your-value --env IMAGE_GENERATION_MCP_DEFAULT_PROVIDER=your-value --env IMAGE_GENERATION_MCP_TRANSFORM_CACHE_SIZE=your-value --env IMAGE_GENERATION_MCP_PAID_PROVIDERS=your-value --env IMAGE_GENERATION_MCP_STYLES_DIR=your-value --env IMAGE_GENERATION_MCP_ALLOW_LOCAL_FILE_INPUT=your-value --env IMAGE_GENERATION_MCP_MAX_INPUT_IMAGE_BYTES=your-value --env IMAGE_GENERATION_MCP_FETCH_TIMEOUT_S=your-value --env IMAGE_GENERATION_MCP_TRANSFER_TTL_DEFAULT_S=your-value --env IMAGE_GENERATION_MCP_TRANSFER_TTL_MAX_S=your-value --env IMAGE_GENERATION_MCP_TRANSFER_GRACE_TTL_S=your-value --env IMAGE_GENERATION_MCP_TRANSFER_LEASE_S=your-value --env IMAGE_GENERATION_MCP_TRANSFER_MAX_UPLOAD_BYTES=your-value -- uvx image-generation-mcpFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"image-generation": {
"command": "uvx",
"args": [
"image-generation-mcp"
],
"env": {
"IMAGE_GENERATION_MCP_KV_STORE_URL": "your-value",
"IMAGE_GENERATION_MCP_TOOLS_ALLOW": "your-value",
"IMAGE_GENERATION_MCP_TOOLS_DENY": "your-value",
"IMAGE_GENERATION_MCP_SERVER_NAME": "your-value",
"IMAGE_GENERATION_MCP_INSTRUCTIONS": "your-value",
"FASTMCP_LOG_LEVEL": "your-value",
"FASTMCP_ENABLE_RICH_LOGGING": "your-value",
"IMAGE_GENERATION_MCP_A1111_HOST": "your-value",
"IMAGE_GENERATION_MCP_A1111_MODEL": "your-value",
"IMAGE_GENERATION_MCP_READ_ONLY": "your-value",
"IMAGE_GENERATION_MCP_SCRATCH_DIR": "your-value",
"IMAGE_GENERATION_MCP_OPENAI_API_KEY": "your-value",
"IMAGE_GENERATION_MCP_GOOGLE_API_KEY": "your-value",
"IMAGE_GENERATION_MCP_SD_WEBUI_HOST": "your-value",
"IMAGE_GENERATION_MCP_SD_WEBUI_MODEL": "your-value",
"IMAGE_GENERATION_MCP_DEFAULT_PROVIDER": "your-value",
"IMAGE_GENERATION_MCP_TRANSFORM_CACHE_SIZE": "your-value",
"IMAGE_GENERATION_MCP_PAID_PROVIDERS": "your-value",
"IMAGE_GENERATION_MCP_STYLES_DIR": "your-value",
"IMAGE_GENERATION_MCP_ALLOW_LOCAL_FILE_INPUT": "your-value",
"IMAGE_GENERATION_MCP_MAX_INPUT_IMAGE_BYTES": "your-value",
"IMAGE_GENERATION_MCP_FETCH_TIMEOUT_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_TTL_DEFAULT_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_TTL_MAX_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_GRACE_TTL_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_LEASE_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_MAX_UPLOAD_BYTES": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"image-generation": {
"type": "stdio",
"command": "uvx",
"args": [
"image-generation-mcp"
],
"env": {
"IMAGE_GENERATION_MCP_KV_STORE_URL": "your-value",
"IMAGE_GENERATION_MCP_TOOLS_ALLOW": "your-value",
"IMAGE_GENERATION_MCP_TOOLS_DENY": "your-value",
"IMAGE_GENERATION_MCP_SERVER_NAME": "your-value",
"IMAGE_GENERATION_MCP_INSTRUCTIONS": "your-value",
"FASTMCP_LOG_LEVEL": "your-value",
"FASTMCP_ENABLE_RICH_LOGGING": "your-value",
"IMAGE_GENERATION_MCP_A1111_HOST": "your-value",
"IMAGE_GENERATION_MCP_A1111_MODEL": "your-value",
"IMAGE_GENERATION_MCP_READ_ONLY": "your-value",
"IMAGE_GENERATION_MCP_SCRATCH_DIR": "your-value",
"IMAGE_GENERATION_MCP_OPENAI_API_KEY": "your-value",
"IMAGE_GENERATION_MCP_GOOGLE_API_KEY": "your-value",
"IMAGE_GENERATION_MCP_SD_WEBUI_HOST": "your-value",
"IMAGE_GENERATION_MCP_SD_WEBUI_MODEL": "your-value",
"IMAGE_GENERATION_MCP_DEFAULT_PROVIDER": "your-value",
"IMAGE_GENERATION_MCP_TRANSFORM_CACHE_SIZE": "your-value",
"IMAGE_GENERATION_MCP_PAID_PROVIDERS": "your-value",
"IMAGE_GENERATION_MCP_STYLES_DIR": "your-value",
"IMAGE_GENERATION_MCP_ALLOW_LOCAL_FILE_INPUT": "your-value",
"IMAGE_GENERATION_MCP_MAX_INPUT_IMAGE_BYTES": "your-value",
"IMAGE_GENERATION_MCP_FETCH_TIMEOUT_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_TTL_DEFAULT_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_TTL_MAX_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_GRACE_TTL_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_LEASE_S": "your-value",
"IMAGE_GENERATION_MCP_TRANSFER_MAX_UPLOAD_BYTES": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
IMAGE_GENERATION_MCP_KV_STORE_URL envIMAGE_GENERATION_MCP_TOOLS_ALLOW envIMAGE_GENERATION_MCP_TOOLS_DENY envIMAGE_GENERATION_MCP_SERVER_NAME envIMAGE_GENERATION_MCP_INSTRUCTIONS envFASTMCP_LOG_LEVEL envFASTMCP_ENABLE_RICH_LOGGING envIMAGE_GENERATION_MCP_A1111_HOST envIMAGE_GENERATION_MCP_A1111_MODEL envIMAGE_GENERATION_MCP_READ_ONLY envIMAGE_GENERATION_MCP_SCRATCH_DIR envIMAGE_GENERATION_MCP_SD_WEBUI_HOST envIMAGE_GENERATION_MCP_SD_WEBUI_MODEL envIMAGE_GENERATION_MCP_DEFAULT_PROVIDER envIMAGE_GENERATION_MCP_TRANSFORM_CACHE_SIZE envIMAGE_GENERATION_MCP_PAID_PROVIDERS envIMAGE_GENERATION_MCP_STYLES_DIR envIMAGE_GENERATION_MCP_ALLOW_LOCAL_FILE_INPUT envIMAGE_GENERATION_MCP_MAX_INPUT_IMAGE_BYTES envIMAGE_GENERATION_MCP_FETCH_TIMEOUT_S envIMAGE_GENERATION_MCP_TRANSFER_TTL_DEFAULT_S envIMAGE_GENERATION_MCP_TRANSFER_TTL_MAX_S envIMAGE_GENERATION_MCP_TRANSFER_GRACE_TTL_S envIMAGE_GENERATION_MCP_TRANSFER_LEASE_S envIMAGE_GENERATION_MCP_TRANSFER_MAX_UPLOAD_BYTES envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account pvliesdonk, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: IMAGE_GENERATION_MCP_OPENAI_API_KEY, IMAGE_GENERATION_MCP_GOOGLE_API_KEY
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.12.1) reached the registry 2 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv), Docker on your computer.
In the same category: Figma Context MCP, Claude Real Video, Figma MCP Server
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the 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.
Figma’s official server gives AI your design data so it can turn designs into code or describe them accurately. Connects to Figma’s cloud.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Multi-provider image generation MCP server built on FastMCP. Generate images from Claude Desktop, Claude Code, or any MCP client using OpenAI, Google Gemini, Stable Diffusion (SD WebUI), or a zero-cost placeholder provider.
[Documentation](https://pvliesdonk.github.io/image-generation-mcp/) | [Config wizard](https://pvliesdonk.github.io/image-generation-mcp/latest/configuration-generator/) | [PyPI](https://pypi.org/project/image-generation-mcp/) | [Docker](https://github.com/pvliesdonk/image-generation-mcp/pkgs/container/image-generation-mcp)
gpt-image-2, gpt-image-1.5, dall-e-3), Google Gemini (gemini-3.1-flash-image, gemini-3-pro-image, gemini-3.1-flash-lite-image), SD WebUI (Stable Diffusion / Forge / reForge), and a zero-cost placeholder for testing.style_profile (strengths, prompt grammar, lifecycle); list_providers includes a top-level warnings array for deprecated models. See Model Catalog.provider="auto" routes by prompt content (text/logo → OpenAI, photoreal/anime → SD WebUI, draft → placeholder).image://{id}/view?format=webp&width=512&crop_x=... resizes / re-encodes / crops on demand without re-generating.task=True (poll for status); short OpenAI calls stream progress in the foreground.app: resources..deb/.rpm with hardened systemd, OIDC + bearer auth, persistent EventStore for HTTP session resumability.With this server mounted in an MCP client, you can ask:
gpt-image-1.5 for typography-aware photorealism.generate_image with provider="sd_webui" and a stylised checkpoint like dreamshaperXL.image://{id}/view?width=512&height=512&crop_x=... resource transforms.image://list resource and the MCP Apps gallery viewer.transform_image with the gallery image_id as a reference (image-to-image via Gemini).pip install image-generation-mcp
If you add optional extras via the PROJECT-EXTRAS-START / PROJECT-EXTRAS-END sentinels in pyproject.toml, document them below:
| Extra | Includes | Use when |
|---|---|---|
mcp | fastmcp[tasks]>=3.0,<4 | Background-task support (task=True), required for long SD generations. |
openai | openai>=1.0 | Enables the OpenAI provider. |
google-genai | google-genai>=1.0 | Enables the Gemini provider. |
all | fastmcp[tasks] + openai + google-genai | Everything except SD WebUI (which is HTTP-only, no extra needed). |
Example: pip install image-generation-mcp[all].
git clone https://github.com/pvliesdonk/image-generation-mcp.git
cd image-generation-mcp uv sync --all-extras --all-groups
docker pull ghcr.io/pvliesdonk/image-generation-mcp:latest
To run the newest merged code instead of the newest release, use the rolling edge tag. It is rebuilt on every merge to main and carries no version identity. See Image tags for the full tag list.
docker pull ghcr.io/pvliesdonk/image-generation-mcp:edge
A compose.yml ships at the repo root as a starting point. Copy .env.example to .env, edit, and docker compose up -d.
To attach a remote Python debugger (development only; the protocol is unauthenticated), see Remote debugging.
Download .deb or .rpm packages from the GitHub Releases page. Both install a hardened systemd unit; env configuration is sourced from /etc/image-generation-mcp/env (copy from the shipped /etc/image-generation-mcp/env.example).
Download the .mcpb bundle from the GitHub Releases page and double-click to install, or run:
mcpb install image-generation-mcp-<version>.mcpb
Claude Desktop prompts for required env vars via a GUI wizard, with no manual JSON editing needed.
For manual Claude Desktop configuration and setup options, see Claude Desktop deployment.
Artifacts ship on three channels. Each row lists exactly what that channel publishes.
| Channel | Version identity | Artifacts |
|---|---|---|
edge (rolling) | None; the commit is the identity | Docker image :edge rebuilt on every merge to main; .mcpb bundle as the mcpb-bundle-edge workflow artifact; Claude Code plugin .zip as the plugin-zip-edge artifact; rolling unstable docs version. It leaves no git tag, GitHub release, or PyPI entry behind. |
| Pre-release | vX.Y.Z-rc.N, computed and reviewed in its release pull request | PyPI (as the pre-release X.Y.ZrcN); GitHub release with wheels, sdist, .deb/.rpm packages, .mcpb bundle, plugin .zip, and SBOM attached; Docker image under its immutable vX.Y.Z-rc.N tag plus the ordering-aware rolling rc tag. Skips the plugin marketplace, the MCP registry, and the docs deploy. |
| Stable | vX.Y.Z | Everything: PyPI, Docker (version tag plus ordering-aware latest / vX / vX.Y), .deb/.rpm, GitHub release assets (wheels, sdist, .mcpb bundle, plugin .zip, SBOM), plugin marketplace and MCP registry entries (when the release is the newest stable), versioned docs with an ordering-aware latest alias. |
Pre-releases reach PyPI so that a candidate's .mcpb bundle installs: the bundle points at PyPI rather than carrying the code. Ordinary installers never see them, because a PEP 440 resolver skips pre-releases unless the requirement pins one or you pass --pre. Ask for a candidate by name with pip install image-generation-mcp==X.Y.ZrcN. PyPI spells it in the PEP 440 canonical form, while tags use SemVer. Rolling pointers are ordering-aware, so a patch release cut from an old release/X.Y branch never moves latest-style tags back to older content, and a candidate for an already-released version never moves rc. See Release process for the full model.
image-generation-mcp serve # stdio transport
image-generation-mcp serve --transport http --port 8000 # streamable HTTP
For library usage (embedding the domain logic without the MCP transport), import from the image_generation_mcp package directly. See the project's domain modules under src/image_generation_mcp/ for entry points.
The server registers a built-in get_server_info tool (via fastmcp_pvl_core.register_server_info_tool) so operators can confirm the deployed version with a single MCP call. The default response carries server_name, server_version, and core_version. Servers that talk to a remote upstream wire upstream version reporting inside the DOMAIN-UPSTREAM-START / DOMAIN-UPSTREAM-END sentinel in src/image_generation_mcp/server.py; see CLAUDE.md for the wiring pattern.
Core environment variables shared across all fastmcp-pvl-core-based services:
| Variable | Default | Description |
|---|---|---|
IMAGE_GENERATION_MCP_KV_STORE_URL | file:///data/state | Persistent-state backend URL shared by every pvl-core subsystem that needs state. memory:// is in-process and lost on restart; file:///path persists on one server; redis://, dynamodb:// and mongodb:// each need their matching extra. When unset, defaults to file:///data/state (the volume family Docker images mount), or to memory://; with a warning; on a host where that directory is not usable. |
FASTMCP_LOG_LEVEL | INFO | Log level for FastMCP internals and app loggers (DEBUG / INFO / WARNING / ERROR / CRITICAL). The -v CLI flag overrides to DEBUG. |
FASTMCP_ENABLE_RICH_LOGGING | true | Set false for plain or structured JSON log output. |
Domain-specific variables go below under Domain configuration.
Callers authenticate via a bearer token or OIDC (mutually exclusive). See the Authentication guide for setup, mapped multi-subject tokens, OIDC, and troubleshooting.
After copier copy and gh repo create --push:
DOMAIN sentinel comment) in this README and in CLAUDE.md. The GENERATED-ENV-TABLE-* regions are not DOMAIN blocks; the config generator owns them and rewrites them on every run.uv sync --all-extras --all-groups.uv run pre-commit install.uv run pytest -x -q && uv run ruff check --fix . && uv run ruff format . && uv run mypy src/ tests/.CI workfl
Only the beginning is shown; read the rest in the repo