ai-vision-mcp
Provides AI-powered image and video analysis using Google Gemini and Vertex AI models through the Model Context Protocol.
README
AI Vision MCP Server
A powerful Model Context Protocol (MCP) server that provides AI-powered image and video analysis using Google Gemini and Vertex AI models.
Features
- Dual Provider Support: Choose between Google Gemini API and Vertex AI
- Multimodal Analysis: Support for both image and video content analysis
- Flexible File Handling: Upload via multiple methods (URLs, local files, base64)
- Storage Integration: Built-in Google Cloud Storage support
- Comprehensive Validation: Zod-based data validation throughout
- Error Handling: Robust error handling with retry logic and circuit breakers
- TypeScript: Full TypeScript support with strict type checking
Quick Start
Pre-requisites
You could choose either to use google provider or vertex_ai provider. For simplicity, google provider is recommended.
Below are the environment variables you need to set based on your selected provider. (Note: It’s recommended to set the timeout configuration to more than 5 minutes for your MCP client).
(i) Using Google AI Studio Provider
export IMAGE_PROVIDER="google" # or vertex_ai
export VIDEO_PROVIDER="google" # or vertex_ai
export GEMINI_API_KEY="your-gemini-api-key"
Get your Google AI Studio's api key here
(ii) Using Vertex AI Provider
export IMAGE_PROVIDER="vertex_ai"
export VIDEO_PROVIDER="vertex_ai"
export VERTEX_CLIENT_EMAIL="your-service-account@project.iam.gserviceaccount.com"
export VERTEX_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
export VERTEX_PROJECT_ID="your-gcp-project-id"
export GCS_BUCKET_NAME="your-gcs-bucket"
Refer to the guideline here on how to set this up.
Installation
Below are the installation guide for this MCP on different MCP clients, such as Claude Desktop, Claude Code, Cursor, Cline, etc.
<details> <summary>Claude Desktop</summary>
Add to your Claude Desktop configuration:
(i) Using Google AI Studio Provider
{
"mcpServers": {
"ai-vision-mcp": {
"command": "npx",
"args": ["ai-vision-mcp"],
"env": {
"IMAGE_PROVIDER": "google",
"VIDEO_PROVIDER": "google",
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}
(ii) Using Vertex AI Provider
{
"mcpServers": {
"ai-vision-mcp": {
"command": "npx",
"args": ["ai-vision-mcp"],
"env": {
"IMAGE_PROVIDER": "vertex_ai",
"VIDEO_PROVIDER": "vertex_ai",
"VERTEX_CLIENT_EMAIL": "your-service-account@project.iam.gserviceaccount.com",
"VERTEX_PRIVATE_KEY": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"VERTEX_PROJECT_ID": "your-gcp-project-id",
"GCS_BUCKET_NAME": "ai-vision-mcp-{VERTEX_PROJECT_ID}"
}
}
}
}
</details>
<details> <summary>Claude Code</summary>
(i) Using Google AI Studio Provider
claude mcp add ai-vision-mcp \
-e IMAGE_PROVIDER=google \
-e VIDEO_PROVIDER=google \
-e GEMINI_API_KEY=your-gemini-api-key \
-- npx ai-vision-mcp
(ii) Using Vertex AI Provider
claude mcp add ai-vision-mcp \
-e IMAGE_PROVIDER=vertex_ai \
-e VIDEO_PROVIDER=vertex_ai \
-e VERTEX_CLIENT_EMAIL=your-service-account@project.iam.gserviceaccount.com \
-e VERTEX_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n" \
-e VERTEX_PROJECT_ID=your-gcp-project-id \
-e GCS_BUCKET_NAME=ai-vision-mcp-{VERTEX_PROJECT_ID} \
-- npx ai-vision-mcp
Note: Increase the MCP startup timeout to 1 minutes and MCP tool execution timeout to about 5 minutes by updating ~\.claude\settings.json as follows:
{
"env": {
"MCP_TIMEOUT": "60000",
"MCP_TOOL_TIMEOUT": "300000"
}
}
</details>
<details> <summary>Cursor</summary>
Go to: Settings -> Cursor Settings -> MCP -> Add new global MCP server
Pasting the following configuration into your Cursor ~/.cursor/mcp.json file is the recommended approach. You may also install in a specific project by creating .cursor/mcp.json in your project folder. See Cursor MCP docs for more info.
(i) Using Google AI Studio Provider
{
"mcpServers": {
"ai-vision-mcp": {
"command": "npx",
"args": ["ai-vision-mcp"],
"env": {
"IMAGE_PROVIDER": "google",
"VIDEO_PROVIDER": "google",
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}
(ii) Using Vertex AI Provider
{
"mcpServers": {
"ai-vision-mcp": {
"command": "npx",
"args": ["ai-vision-mcp"],
"env": {
"IMAGE_PROVIDER": "vertex_ai",
"VIDEO_PROVIDER": "vertex_ai",
"VERTEX_CLIENT_EMAIL": "your-service-account@project.iam.gserviceaccount.com",
"VERTEX_PRIVATE_KEY": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"VERTEX_PROJECT_ID": "your-gcp-project-id",
"GCS_BUCKET_NAME": "ai-vision-mcp-{VERTEX_PROJECT_ID}"
}
}
}
}
</details>
<details> <summary>Cline</summary>
Cline uses a JSON configuration file to manage MCP servers. To integrate the provided MCP server configuration:
- Open Cline and click on the MCP Servers icon in the top navigation bar.
- Select the Installed tab, then click Advanced MCP Settings.
- In the cline_mcp_settings.json file, add the following configuration:
(i) Using Google AI Studio Provider
{
"mcpServers": {
"timeout": 300,
"type": "stdio",
"ai-vision-mcp": {
"command": "npx",
"args": ["ai-vision-mcp"],
"env": {
"IMAGE_PROVIDER": "google",
"VIDEO_PROVIDER": "google",
"GEMINI_API_KEY": "your-gemini-api-key"
}
}
}
}
(ii) Using Vertex AI Provider
{
"mcpServers": {
"ai-vision-mcp": {
"timeout": 300,
"type": "stdio",
"command": "npx",
"args": ["ai-vision-mcp"],
"env": {
"IMAGE_PROVIDER": "vertex_ai",
"VIDEO_PROVIDER": "vertex_ai",
"VERTEX_CLIENT_EMAIL": "your-service-account@project.iam.gserviceaccount.com",
"VERTEX_PRIVATE_KEY": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n",
"VERTEX_PROJECT_ID": "your-gcp-project-id",
"GCS_BUCKET_NAME": "ai-vision-mcp-{VERTEX_PROJECT_ID}"
}
}
}
}
</details>
<details>
<summary>Other MCP clients</summary>
The server uses stdio transport and follows the standard MCP protocol. It can be integrated with any MCP-compatible client by running:
npx ai-vision-mcp
</details>
MCP Tools
The server provides four main MCP tools:
1) analyze_image
Analyzes an image using AI and returns a detailed description.
Parameters:
imageSource(string): URL, base64 data, or file path to the imageprompt(string): Question or instruction for the AImode(string, optional): Analysis mode - one of:general(default) - General image analysispalette- Extract design tokens (colors, spacing, typography)hierarchy- Analyze visual hierarchy and eye flowcomponents- Catalog UI components and design system maturity
options(object, optional): Analysis options including temperature and max tokens
Examples:
- General image analysis:
{
"imageSource": "https://plus.unsplash.com/premium_photo-1710965560034-778eedc929ff",
"prompt": "What is this image about? Describe what you see in detail."
}
- Extract design tokens:
{
"imageSource": "https://example.com/design.png",
"prompt": "Extract all design tokens from this screenshot",
"mode": "palette"
}
- Analyze visual hierarchy:
{
"imageSource": "C:\\Users\\username\\Downloads\\ui_mockup.png",
"prompt": "Analyze the visual hierarchy and eye flow",
"mode": "hierarchy"
}
- Component inventory:
{
"imageSource": "https://example.com/design-system.png",
"prompt": "List all UI components and evaluate design system maturity",
"mode": "components"
}
2) compare_images
Compares multiple images using AI and returns a detailed comparison analysis.
Parameters:
imageSources(array): Array of image sources (URLs, base64 data, or file paths) - minimum 2, maximum 4 imagesprompt(string): Question or instruction for comparing the imagesoptions(object, optional): Analysis options including temperature and max tokens
Examples:
- Compare images from URLs:
{
"imageSources": [
"https://example.com/image1.jpg",
"https://example.com/image2.jpg"
],
"prompt": "Compare these two images and tell me the differences"
}
- Compare mixed sources:
{
"imageSources": [
"https://example.com/image1.jpg",
"C:\\\\Users\\\\username\\\\Downloads\\\\image2.jpg",
"data:image/jpeg;base64,/9j/4AAQSkZJRgAB..."
],
"prompt": "Which image has the best lighting quality?"
}
3) detect_objects_in_image
Detects objects in an image using AI vision models and generates annotated images with bounding boxes. Returns detected objects with coordinates and either saves the annotated image to a file or temporary directory.
Parameters:
imageSource(string): URL, base64 data, or file path to the imageprompt(string): Custom detection prompt describing what to detect or recognize in the imageoutputFilePath(string, optional): Explicit output path for the annotated image
Configuration:
This function uses optimized default parameters for object detection and does not accept runtime options parameter. To customize the AI parameters (temperature, topP, topK, maxTokens), use environment variables:
# Recommended environment variable settings for object detection (these are now the defaults)
TEMPERATURE_FOR_DETECT_OBJECTS_IN_IMAGE=0.0 # Deterministic responses
TOP_P_FOR_DETECT_OBJECTS_IN_IMAGE=0.95 # Nucleus sampling
TOP_K_FOR_DETECT_OBJECTS_IN_IMAGE=30 # Vocabulary selection
MAX_TOKENS_FOR_DETECT_OBJECTS_IN_IMAGE=8192 # High token limit for JSON
File Handling Logic:
- Explicit outputFilePath provided → Saves to the exact path specified
- If not explicit outputFilePath → Automatically saves to temporary directory
Response Types:
- Returns
fileobject when explicit outputFilePath is provided - Returns
tempFileobject when explicit outputFilePath is not provided so the image file output is auto-saved to temporary folder - Always includes
detectionsarray with detected objects and coordinates - Includes
summarywith percentage-based coordinates for browser automation
Examples:
- Basic object detection:
{
"imageSource": "https://example.com/image.jpg",
"prompt": "Detect all objects in this image"
}
- Save annotated image to specific path:
{
"imageSource": "C:\\Users\\username\\Downloads\\image.jpg",
"outputFilePath": "C:\\Users\\username\\Documents\\annotated_image.png"
}
- Custom detection prompt:
{
"imageSource": "data:image/jpeg;base64,/9j/4AAQSkZJRgAB...",
"prompt": "Detect and label all electronic devices in this image"
}
4) audit_design
Audits UI/UX design compliance with pixel-level analysis and AI critique.
This tool provides automated design compliance auditing using pure TypeScript/JavaScript pixel analysis combined with Gemini Vision API critique. It extracts dominant colors, detects visual complexity, validates WCAG contrast ratios, and generates actionable design recommendations.
Inspired by: Automating UX/UI Design Analysis with Python, Machine Learning, and LLMs by Jade Graham
Parameters:
imageSource(string): URL, base64 data, or file path to the design imageprompt(string, optional): Custom audit context or focus areasoptions(object, optional): Analysis options including temperature and max tokens
Features:
- Dominant Colors: K-means clustering to extract 5 primary colors
- Edge Complexity: Sobel operator for visual structure analysis
- WCAG Contrast: W3C relative luminance formula validation (AA/AAA)
- Luminance Stats: Mean brightness and standard deviation calculations
- Design Issues: Automated detection of contrast, complexity, and brightness problems
- AI Critique: Gemini-powered recommendations for design improvements
Examples:
- Basic design audit:
{
"imageSource": "https://example.com/design.png",
"prompt": "Audit this design for accessibility and visual hierarchy"
}
- Audit local design file:
{
"imageSource": "C:\\Users\\username\\Downloads\\ui_design.png",
"prompt": "Check WCAG AA compliance"
}
5) analyze_video
Analyzes a video using AI and returns a detailed description.
Parameters:
videoSource(string): YouTube URL, GCS URI, or local file path to the videoprompt(string): Question or instruction for the AIoptions(object, optional): Analysis options including temperature and max tokens
Supported video sources:
- YouTube URLs (e.g.,
https://www.youtube.com/watch?v=...) - Local file paths (e.g.,
C:\Users\username\Downloads\video.mp4)
Examples:
- Analyze video from YouTube URL:
{
"videoSource": "https://www.youtube.com/watch?v=9hE5-98ZeCg",
"prompt": "What is this video about? Describe what you see in detail."
}
- Analyze local video file:
{
"videoSource": "C:\\Users\\username\\Downloads\\video.mp4",
"prompt": "What is this video about? Describe what you see in detail."
}
Note: Only YouTube URLs are supported for public video URLs. Other public video URLs are not currently supported.
Environment Configuration
For basic setup, you only need to configure the provider selection and required credentials:
Google AI Studio Provider (Recommended)
export IMAGE_PROVIDER="google"
export VIDEO_PROVIDER="google"
export GEMINI_API_KEY="your-gemini-api-key"
Vertex AI Provider (Production)
export IMAGE_PROVIDER="vertex_ai"
export VIDEO_PROVIDER="vertex_ai"
export VERTEX_CLIENT_EMAIL="your-service-account@project.iam.gserviceaccount.com"
export VERTEX_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"
export VERTEX_PROJECT_ID="your-gcp-project-id"
export GCS_BUCKET_NAME="your-gcs-bucket"
📖 Detailed Configuration Guide
For comprehensive environment variable documentation, including:
- Complete configuration reference (60+ environment variables)
- Function-specific optimization examples
- Advanced configuration patterns
- Troubleshooting guidance
👉 See Environment Variable Guide
Configuration Priority Overview
The server uses a hierarchical configuration system where more specific settings override general ones:
- LLM-assigned values (runtime parameters in tool calls)
- Function-specific variables (
TEMPERATURE_FOR_ANALYZE_IMAGE, etc.) - Task-specific variables (
TEMPERATURE_FOR_IMAGE, etc.) - Universal variables (
TEMPERATURE, etc.) - System defaults
<details> <summary><strong>Quick Configuration Examples</strong></summary>
Basic Optimization:
# General settings
export TEMPERATURE=0.7
export MAX_TOKENS=1500
# Task-specific optimization
export TEMPERATURE_FOR_IMAGE=0.2 # More precise for images
export TEMPERATURE_FOR_VIDEO=0.5 # More creative for videos
Function-specific Optimization:
# Optimize individual functions
export TEMPERATURE_FOR_ANALYZE_IMAGE=0.1
export TEMPERATURE_FOR_COMPARE_IMAGES=0.3
export TEMPERATURE_FOR_DETECT_OBJECTS_IN_IMAGE=0.0 # Deterministic
export MAX_TOKENS_FOR_DETECT_OBJECTS_IN_IMAGE=8192 # High token limit
Model Selection:
# Choose models per function
export ANALYZE_IMAGE_MODEL="gemini-2.5-flash-lite"
export COMPARE_IMAGES_MODEL="gemini-2.5-flash"
export ANALYZE_VIDEO_MODEL="gemini-2.5-flash-pro"
</details>
Troubleshooting (stdio / Codex / Claude Code)
1) "Transport closed" / tool call fails
If you see errors like:
tools/call failed: Transport closed
Common causes:
A) Image annotation dependency failed to load
This server uses imagescript for image annotation/dimension extraction.
Verify it loads:
npm run doctor
# or
npm run check:imagescript
B) stdout logs corrupt stdio MCP framing
This server uses the MCP stdio transport (newline-delimited JSON-RPC over stdout).
- ✅ stdout must contain only MCP JSON-RPC messages
- ✅ write logs to stderr (e.g.
console.error) - ❌ do not use
console.login stdio MCP servers
If stdout is polluted, clients (Codex/Claude Code) may disconnect and report Transport closed.
Development
Prerequisites
- Node.js 18+
- npm or yarn
Setup
# Clone the repository
git clone https://github.com/tan-yong-sheng/ai-vision-mcp.git
cd ai-vision-mcp
# Install dependencies
npm install
# Build the project
npm run build
# Start development server
npm run dev
Scripts
npm run build- Build the TypeScript projectnpm run dev- Start development server with watch modenpm run lint- Run ESLintnpm run format- Format code with Prettiernpm start- Start the built server
Architecture
The project follows a modular architecture:
src/
├── providers/ # AI provider implementations
│ ├── gemini/ # Google Gemini provider
│ ├── vertexai/ # Vertex AI provider
│ └── factory/ # Provider factory
├── services/ # Core services
│ ├── ConfigService.ts
│ └── FileService.ts
├── storage/ # Storage implementations
├── file-upload/ # File upload strategies
├── types/ # TypeScript type definitions
├── utils/ # Utility functions
└── server.ts # Main MCP server
Error Handling
The server includes comprehensive error handling:
- Validation Errors: Input validation using Zod schemas
- Network Errors: Automatic retries with exponential backoff
- Authentication Errors: Clear error messages for API key issues
- File Errors: Handling for file size limits and format restrictions
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Acknowledgments
- Google for the Gemini and Vertex AI APIs
- The Model Context Protocol team for the MCP framework
- Jade Graham for the design analysis methodology that inspired the
audit_designtool - All contributors and users of this project
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。