universal-image-mcp
Enables AI image generation using Amazon Bedrock with Nova Canvas model.
Enables AI image generation using Google Gemini's Imagen 4 and Gemini 2.5 Flash Image models.
Enables AI image generation using OpenAI's GPT Image 1.5, ChatGPT Image, and DALL-E models.
Click on "Install 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., "@universal-image-mcpGenerate an image of a sunset over mountains using AWS Bedrock."
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.
Universal Image MCP - Multi-Provider AI Image Generation Server for Claude Desktop & MCP Clients
Universal MCP server for AI image generation supporting AWS Bedrock (Nova Canvas), OpenAI (GPT Image, DALL-E), and Google Gemini (Imagen 4). Generate, transform, and edit images using multiple AI models through a single Model Context Protocol interface.
What is Universal Image MCP?
Universal Image MCP is a Model Context Protocol (MCP) server that provides unified access to multiple AI image generation providers. Whether you're using Claude Desktop, Kiro IDE, or any MCP-compatible client, this server lets you generate and transform images using: n
AWS Bedrock - Amazon Nova Canvas for enterprise-grade image generation
OpenAI - GPT Image 1.5, ChatGPT Image, DALL-E models
Google Gemini - Gemini 2.5 Flash Image, Imagen 4, Imagen 4 Ultra
Perfect for developers building AI applications, content creators, and anyone needing programmatic access to multiple image generation APIs through a single interface.
Related MCP server: imagine-mcp
Example Outputs
Comparison of architecture diagrams generated by different models using this MCP server:
View Prompt Used
Technical Diagram Prompt:
Technical architecture diagram of a Universal Image MCP Server system. The diagram shows:
Top layer: MCP Client (Claude Desktop, Kiro IDE) connecting via Model Context Protocol
Middle layer: Universal Image MCP Server (FastMCP) with three main components:
1. Server Module (server.py) - handles list_models, generate_image, transform_image, prompt_guide tools
2. Provider Module (providers.py) - manages lazy initialization and provider abstraction
3. Configuration - environment variables for ENABLE_AWS, ENABLE_OPENAI, ENABLE_GEMINI
Bottom layer: Three provider boxes side by side:
- AWS Bedrock (boto3) - Amazon Nova Canvas, with AWS credentials and region config
- OpenAI API - GPT Image 1.5, ChatGPT Image Latest, with API key
- Google Gemini API - Gemini 2.5 Flash, Imagen 4, with API key
Data flow arrows showing:
- Client sends tool requests to Server
- Server routes to appropriate Provider based on model_id
- Providers make API calls to their respective services
- Image data flows back through the chain
Clean, professional software architecture diagram style with boxes, arrows, and labels. Use blue and gray color scheme. Modern technical documentation aesthetic. Isometric or layered view showing clear separation of concerns.3D Clay Art Prompt:
Same technical architecture content as above, but rendered in:
3D clay art style with soft rounded shapes, pastel colors, cute minimalist aesthetic, soft studio lighting, clean composition with depth and shadows.Note: 3D Clay Art versions used s3tablearch.png as a reference image for style guidance.
Key Features
🔄 Multi-Provider Support - Switch between AWS Bedrock, OpenAI, and Google Gemini seamlessly
🚀 Dynamic Model Discovery - Automatically fetches latest available models from each provider API
⚡ Lazy Initialization - Provider clients load only when needed for optimal performance
🎨 Reference Image Support - Generate new images based on existing image styles
📐 Configurable Dimensions - Custom width/height for supported AI models
📚 Built-in Prompt Guide - Best practices for writing effective image generation prompts
🔌 MCP Protocol - Works with Claude Desktop, Kiro IDE, and all MCP-compatible clients
🐍 Python 3.11+ - Modern Python with type hints and async support
Quick Start Installation
Install via pip:
pip install universal-image-mcpOr use with uvx (recommended for MCP servers):
uvx universal-image-mcp@latestMCP Server Configuration
For Claude Desktop
Add to your Claude Desktop MCP configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"universal-image-mcp": {
"command": "uvx",
"args": ["universal-image-mcp@latest"],
"env": {
"ENABLE_AWS": "true",
"AWS_PROFILE": "default",
"AWS_REGION": "us-east-1",
"ENABLE_OPENAI": "true",
"OPENAI_API_KEY": "sk-...",
"ENABLE_GEMINI": "true",
"GEMINI_API_KEY": "..."
}
}
}
}For Kiro IDE
Add to ~/.kiro/settings/mcp.json:
{
"mcpServers": {
"universal-image-mcp": {
"command": "uvx",
"args": ["universal-image-mcp@latest"],
"env": {
"ENABLE_AWS": "true",
"ENABLE_OPENAI": "true",
"OPENAI_API_KEY": "sk-...",
"ENABLE_GEMINI": "true",
"GEMINI_API_KEY": "..."
}
}
}
}Getting API Keys and Credentials
Before using this MCP server, you'll need to obtain credentials for the providers you want to use.
AWS Bedrock Setup
AWS Bedrock uses your local AWS credentials. You have several options:
AWS CLI Configuration (Recommended)
Install the AWS CLI
Run
aws configureand provide your access key, secret key, and regionOfficial guide: AWS CLI Configuration
AWS Credentials File
Create
~/.aws/credentialswith your access keysCreate
~/.aws/configwith your region settingsOfficial guide: Shared Config and Credentials Files
Environment Variables
Set
AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY, andAWS_REGIONOfficial guide: AWS CLI Authentication
Getting AWS Access Keys:
Sign in to the AWS Console
Navigate to IAM → Users → Your User → Security Credentials
Create a new access key under "Access keys"
Ensure your IAM user has permissions for Bedrock (e.g.,
AmazonBedrockFullAccesspolicy)
OpenAI API Key
Create an OpenAI Account
Visit OpenAI Platform
Sign up or log in to your account
Generate API Key
Go to API Keys page
Click "Create new secret key"
Give it a descriptive name (optional)
Copy the key immediately (you won't be able to see it again)
Add Billing Information
OpenAI requires payment information to use the API
Navigate to Billing to add payment details
Official Documentation: OpenAI Quickstart Guide
Google Gemini API Key
Get a Gemini API Key
Visit Google AI Studio
Sign in with your Google account
Click "Get API Key" or "Create API Key"
Create a new project or select an existing one
Copy your API key
Alternative: Google Cloud API Key
For production use, you can use Vertex AI on Google Cloud
This provides more enterprise features and billing controls
Official Documentation: Gemini API Quickstart
Environment Variables
API Reference - MCP Tools
list_models()
List all available AI image generation models from enabled providers. Models are fetched dynamically from each provider's API with deprecated models automatically filtered.
Returns: Formatted list of model IDs compatible with generate_image() and transform_image()
Example models:
AWS:
amazon.nova-canvas-v1:0OpenAI:
gpt-image-1.5,chatgpt-image-latestGemini:
models/gemini-2.5-flash-image,models/imagen-4.0-generate-001
generate_image(prompt, model_id, output_path, reference_image?, width?, height?)
Generate AI images from text prompts using any supported model.
transform_image(image_path, prompt, model_id, output_path)
Transform and edit existing images using AI-powered modifications based on text prompts.
Use cases: Image editing, style transfer, AI-powered photo manipulation, artistic transformations
prompt_guide()
Get AI prompt engineering best practices for image generation. Returns comprehensive guidelines covering:
Prompt structure (Subject + Details + Style + Lighting + Mood + Composition)
Specific vs generic descriptions
Style, lighting, and mood keywords
Example prompts for different use cases
Supported AI Image Models
All models are discovered dynamically. Use list_models() to see current options.
AWS Bedrock Models
Amazon Nova Canvas (
amazon.nova-canvas-v1:0) - Enterprise-grade image generation with text and image input support
OpenAI Models
GPT Image 1.5 (
gpt-image-1.5) - Latest OpenAI image generation modelChatGPT Image Latest (
chatgpt-image-latest) - ChatGPT-integrated image generation
Google Gemini Models
Gemini 2.5 Flash Image (
models/gemini-2.5-flash-image) - Fast, efficient image generationGemini 3 Pro Image (
models/gemini-3-pro-image-preview) - Advanced image generation capabilitiesImagen 4 (
models/imagen-4.0-generate-001) - Google's state-of-the-art image modelImagen 4 Ultra (
models/imagen-4.0-ultra-generate-001) - Highest quality Imagen modelImagen 4 Fast (
models/imagen-4.0-fast-generate-001) - Optimized for speed
Use Cases
AI Application Development - Integrate multiple image generation providers into your apps
Content Creation - Generate marketing materials, social media content, illustrations
Prototyping & Design - Quickly visualize concepts and design ideas
Image Editing Automation - Batch process and transform images with AI
Research & Experimentation - Compare outputs across different AI models
Claude Desktop Workflows - Enhance Claude conversations with image generation
Developer Tools - Build MCP-compatible tools and extensions
Contributing
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
Related Projects
Model Context Protocol - Official MCP documentation
Claude Desktop - AI assistant with MCP support
FastMCP - Python framework for building MCP servers
Keywords
mcp-server image-generation ai-images aws-bedrock openai google-gemini claude-desktop imagen nova-canvas python fastmcp model-context-protocol ai-art text-to-image image-transformation
License
MIT
Available Tools
4 toolsgenerate_imageA
Generate an image from a text prompt using the specified model.
Args: prompt: Detailed text description of the image to generate. Be specific about subject, style, lighting, colors, composition, and mood. Example: "A fluffy orange cat sitting on a windowsill, golden hour lighting, watercolor style" model_id: Model identifier from list_models(). Examples: "amazon.nova-canvas-v1:0", "gpt-image-1.5", "models/gemini-2.5-flash-image" output_path: Absolute or relative file path where the generated image will be saved. Supports PNG, JPEG formats. Parent directories are created automatically. reference_image: Optional. Path to an existing image to use as style/content reference. The model will generate a new image influenced by this reference. width: Optional. Image width in pixels. Default: 1024. Common values: 512, 768, 1024, 1280. Note: Some models only support specific sizes. Max: 4096px. height: Optional. Image height in pixels. Default: 1024. Common values: 512, 768, 1024, 1280. Note: Some models only support specific sizes. Max: 4096px.
Returns: Success message with output path, or error description.
| Name | Required | Description | Default |
|---|---|---|---|
| width | No | ||
| height | No | ||
| prompt | Yes | ||
| model_id | Yes | ||
| output_path | Yes | ||
| reference_image | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It does so effectively: states that images are saved to output_path, that parent directories are created automatically, and that PNG/JPEG formats are supported. It also notes model-specific size limitations and the 4096px maximum. It does not address potential costs, rate limits, or authorization requirements, which is a minor gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a one-sentence summary followed by a well-organized Args section. Every sentence adds functional value: parameter explanations, examples, defaults, and caveats. There is no filler or repetition. The structure makes it easy for an agent to scan and extract key constraints. At ~8 sentences for 6 parameters, it is appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 6 parameters, an output schema, and no annotations; the description covers all parameter semantics and high-level return behavior ('Success message with output path, or error description'). It references list_models() to aid model selection. Missing is an explicit disqualifier for when to use transform_image instead, but overall this is a thorough description that enables correct invocation in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite the input schema having 0% description coverage, the description documents all 6 parameters in detail: prompt includes a concrete example and guidance; model_id references list_models() and gives examples; output_path explains save behavior and formats; reference_image clarifies its purpose; width and height include defaults, common values, and max constraints. This far exceeds the schema's minimal type/title information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource: 'Generate an image from a text prompt using the specified model.' This clearly distinguishes the tool from siblings like transform_image (which would modify an existing image) and list_models (which lists available models). The phrase 'generate a new image' in the reference_image parameter reinforces the 'create from scratch' semantics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description strongly implies usage through phrases like 'using the specified model' and 'model_id: Model identifier from list_models().' It clarifies that reference images influence generation, not transform existing files. However, it does not explicitly name transform_image as an alternative for editing scenarios, and it lacks an explicit 'Use this tool when...' or 'If you need to edit, use...' statement. Nevertheless, the distinction from siblings is inferable from the action verbs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsA
List available image generation models from all enabled providers.
Returns a formatted list of model IDs that can be used with generate_image and transform_image. Models are fetched dynamically from each provider's API.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for transparency. It discloses that models are fetched dynamically from each provider's API, indicating a live network operation. However, it does not explicitly state that it is read-only, potential latencies, or failure modes if providers are unavailable. This is adequate but not comprehensive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with exactly three sentences, each serving a purpose: stating the core function, describing the output and its use, and noting the dynamic data source. No extraneous content or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple no-parameter listing tool, the description covers the essentials: what it lists, the output format (formatted list of IDs), and how data is obtained. Given an output schema exists, it doesn't need to detail the return structure. Minor gaps include potential error behavior and network requirements, but these are not critical for this simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema coverage is trivially 100% and the description needs to add no parameter details. Baseline for 0 params is 4, and the description confirms no arguments are needed by focusing entirely on the listing operation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('List') and resource ('available image generation models from all enabled providers'). It distinguishes itself from sibling tools by explicitly noting the output (model IDs) and its relationship to generate_image and transform_image.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the primary use case: retrieve model IDs before using generate_image or transform_image. It provides clear context but does not explicitly state 'use this before other tools' or mention when not to use it. The linkage to sibling tools effectively guides usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
prompt_guideA
Get best practices and examples for writing effective image generation prompts.
Returns guidelines for crafting detailed prompts that produce better results.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of disclosure. It states that the tool 'returns guidelines', which is a clear behavioral outcome. However, it does not explicitly mention side effects (likely none) or whether any authentication is needed, leaving some ambiguity for a tool with zero annotation support.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise—two sentences with no redundancy. The first sentence front-loads the purpose, and the second clarifies the return value. Every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (no parameters, no nested objects) and the presence of an output schema, the description covers the essential context. It clearly differentiates from sibling tools and fully explains what the tool delivers. The sibling names provide additional context that aligns with the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, and the schema description coverage is 100% (trivially). Per the baseline for 0 parameters, a score of 4 is appropriate since no parameter semantics are needed and the description doesn't need to compensate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function with a specific verb ('Get') and resource ('best practices and examples for writing effective image generation prompts'). It distinguishes itself from siblings like generate_image and transform_image by focusing on guidance rather than action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for improving image prompt quality but offers no explicit when-to-use or comparison with alternatives. With sibling tools present, more explicit guidance would be helpful, but the context makes the primary use case evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transform_imageA
Transform an existing image based on a text prompt.
Args: image_path: Path to the source image to transform. Supports common formats (PNG, JPEG, etc.) prompt: Text description of the desired transformation. Examples: "Make it black and white", "Add a rainbow in the sky", "Convert to watercolor painting style" model_id: Model identifier from list_models(). Examples: "amazon.nova-canvas-v1:0", "gpt-image-1.5", "models/gemini-2.5-flash-image" output_path: File path where the transformed image will be saved. Parent directories are created automatically.
Returns: Success message with output path, or error description.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| model_id | Yes | ||
| image_path | Yes | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses that the output is saved to output_path, that parent directories are created automatically, and that common image formats are supported. It does not explicitly address overwrite behavior or original-file preservation, but the explicit output_path sufficiently implies a new file is written.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured with a one-sentence purpose, a clear Args list, and a Returns line. Every sentence contributes meaning; there is no fluff or repetition. It is appropriately sized for a 4-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having no annotations and an unrevealed output schema, the description is self-sufficient: it explains what the tool does, every parameter, the expected output, and even auxiliary details like automatic directory creation and model sourcing. This allows an agent to invoke it correctly without external knowledge.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description compensates fully. Each parameter is explained with semantics: image_path includes format support, prompt includes multiple examples, model_id lists valid examples and references list_models(), output_path clarifies directory creation. This adds far more than the bare schema property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Transform an existing image based on a text prompt.' This specific verb-resource pair distinguishes it from sibling generate_image (which creates new images). The phrase 'existing image' is an explicit scope marker.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is used to modify existing images with a text prompt. It also references list_models() for model selection, guiding users on how to obtain valid model IDs. However, it does not explicitly name alternatives or state when not to use this tool, only implying the contrast with generation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.3- First observed
generate_image - First observed
list_models - First observed
prompt_guide - First observed
transform_image
TDQS
Scored across 4 tools
The tools are mostly distinct: list_models, generate_image, transform_image, and prompt_guide each have clear roles. However, generate_image's optional reference_image overlaps with transform_image's purpose of editing an existing image, which could cause confusion when choosing between them.
The first three tools follow a consistent verb_noun pattern (list_models, generate_image, transform_image). The exception is prompt_guide, which is a noun phrase rather than a verb, creating a minor deviation from the otherwise uniform naming convention.
With 4 tools, the server is well-scoped for its stated purpose. Each tool serves an essential function in the image generation workflow, and the count is neither excessive nor too sparse.
The server covers the core image generation lifecycle: listing models, generating images, and transforming existing ones. A gap is the lack of model capability details beyond IDs, which would help agents choose the right model for a task, but this can be worked around.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for Qwen Image 3 AI image generation
MCP server for Wan AI video generation
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
MCP server for ByteDance Seedream AI image generation
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables AI applications to access 20+ model providers (including OpenAI, Anthropic, Google) through a unified interface for text and image generation.230MIT
- AlicenseAqualityAmaintenanceProduction-grade MCP server for image and video understanding and generation across Gemini, OpenAI, and Grok.54Apache 2.0
- AlicenseAqualityDmaintenanceA multi-provider MCP server that enables AI agents to generate and edit images across OpenAI, Google Gemini, Azure, Vertex, and OpenRouter with a unified API.317Apache 2.0
- AlicenseNot gradedqualityBmaintenanceMCP server for generating, editing, and processing images via multiple providers including Kilo, OpenRouter, OpenAI, and Gemini, with local tools for background removal, resizing, and cropping.182MIT