Vision MCP Server
by Loveacup
README.md
<div align="center">
# ๐๏ธ Vision MCP Server
[](LICENSE)
[](https://nodejs.org/)
[](https://modelcontextprotocol.io/)
**Give your AI agent eyes.** An MCP server providing multimodal vision capabilities โ image analysis, OCR, image comparison, and video analysis โ powered by any OpenAI-compatible vision model.
**่ฎฉไฝ ็ AI ไปฃ็ๆฅๆ่ง่ง่ฝๅใ** ้่ฟไปปไฝ OpenAI ๅ
ผๅฎน็่ง่งๆจกๅ๏ผๆไพๅพๅๅๆใOCR ๆๅญ่ฏๅซใๅพๅๅฏนๆฏๅ่ง้ขๅๆใ
[Features](#-features) ยท [Quick Start](#-quick-start) ยท [Tools](#๏ธ-tools-reference) ยท [Models](#-supported-models) ยท [ไธญๆ่ฏดๆ](#-ไธญๆ่ฏดๆ)
</div>
---
## โจ Features
| Tool | Description |
|------|-------------|
| ๐ `analyze_image` | Analyze images with natural language prompts |
| ๐ `ocr_image` | Extract text from images (plain text / Markdown / JSON) |
| ๐ `compare_images` | Compare 2โ4 images side by side |
| ๐ฌ `analyze_video` | Analyze video content (requires video-capable model) |
**Plus:**
- ๐ **OpenAI-compatible** โ Works with any vision model via standard API
- ๐ **Local files & URLs** โ Auto-converts local files to base64
- โ๏ธ **Configurable** โ Environment variables, config files, or both
## ๐ Quick Start
### 1. Install
```bash
git clone https://github.com/Loveacup/vision-mcp-server.git
cd vision-mcp-server
npm install && npm run build
```
### 2. Configure
Create a `.env` file in the project root:
```bash
VISION_BASE_URL=http://your-server:port/v1/chat/completions
VISION_MODEL=Qwen3-VL-32B
VISION_API_KEY=your-api-key # optional for local models
```
<details>
<summary>๐ Or use <code>config.json</code></summary>
```json
{
"baseUrl": "http://your-server:port/v1/chat/completions",
"model": "Qwen3-VL-32B",
"apiKey": "your-api-key",
"maxTokens": 4096,
"temperature": 0.7
}
```
</details>
### 3. Run
```bash
npm start
```
The server communicates over stdio, designed to be launched by an MCP client such as Claude Code.
## ๐ Claude Code Integration
Add to your `~/.mcp.json`:
```json
{
"mcpServers": {
"vision": {
"command": "node",
"args": ["/path/to/vision-mcp-server/dist/index.js"],
"env": {
"VISION_BASE_URL": "http://your-server:port/v1/chat/completions",
"VISION_MODEL": "Qwen3-VL-32B",
"VISION_API_KEY": "your-api-key"
}
}
}
}
```
> Replace `/path/to/vision-mcp-server` with the actual install path.
## โ๏ธ Configuration Reference
Configuration priority: **environment variables > config file > defaults**
| Variable | Config Key | Default | Description |
|---|---|---|---|
| `VISION_BASE_URL` | `baseUrl` | *(required)* | OpenAI-compatible chat completions endpoint |
| `VISION_MODEL` | `model` | `Qwen3-VL-32B` | Model name |
| `VISION_API_KEY` | `apiKey` | *(empty)* | API key (optional for local models) |
| `VISION_MAX_TOKENS` | `maxTokens` | `4096` | Max response tokens |
| `VISION_TEMPERATURE` | `temperature` | `0.7` | Sampling temperature |
## ๐ ๏ธ Tools Reference
### `analyze_image`
Analyze an image with a vision language model.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `image` | string | โ
| โ | Local file path or URL |
| `prompt` | string | | `"Describe this image in detail."` | Analysis prompt |
| `detail` | `"low"` \| `"high"` \| `"auto"` | | `"auto"` | Detail level |
### `ocr_image`
Extract text from an image using OCR.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `image` | string | โ
| โ | Local file path or URL |
| `languages` | string | | `""` | Language hint, e.g. `"zh,en"` |
| `format` | `"plain"` \| `"markdown"` \| `"json"` | | `"plain"` | Output format |
### `compare_images`
Compare 2โ4 images and describe differences/similarities.
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `images` | string[] | โ
| โ | 2โ4 image sources |
| `prompt` | string | | `"Compare these images..."` | Comparison prompt |
### `analyze_video`
Analyze video content. Requires a model with video support (e.g., Qwen3-VL).
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `video` | string | โ
| โ | Local file path or URL |
| `prompt` | string | | `"Describe what happens in this video."` | Analysis prompt |
## ๐ค Supported Models
| Model | Provider | Image | Video | Notes |
|---|---|:---:|:---:|---|
| **Qwen3-VL** | Self-hosted / API | โ
| โ
| Recommended. Full multimodal support |
| **GPT-4o** | OpenAI | โ
| โ | Strong image analysis |
| **LLaVA** | Self-hosted | โ
| โ | Open-source alternative |
| **InternVL** | Self-hosted | โ
| โ ๏ธ | Strong multilingual OCR |
Any model served via vLLM, Ollama, LMDeploy, or other OpenAI-compatible servers should work.
**Supported formats:** JPEG, PNG, GIF, WebP, BMP, SVG | MP4, AVI, MOV, MKV, WebM
## ๐ Project Structure
```
vision-mcp-server/
โโโ src/
โ โโโ index.ts # MCP server entry point
โ โโโ config.ts # Configuration loader
โ โโโ types.ts # TypeScript type definitions
โ โโโ tools/
โ โ โโโ analyze-image.ts
โ โ โโโ ocr-image.ts
โ โ โโโ compare-images.ts
โ โ โโโ analyze-video.ts
โ โโโ utils/
โ โโโ api-client.ts # OpenAI-compatible API client
โ โโโ file-handler.ts # Local file โ base64
โโโ package.json
โโโ tsconfig.json
โโโ .env.example
โโโ LICENSE
```
## ๐ License
[MIT](LICENSE)
---
## ๐จ๐ณ ไธญๆ่ฏดๆ
### ๅ่ฝ
- **`analyze_image`** โ ไฝฟ็จ่ง่ง่ฏญ่จๆจกๅๅๆๅพๅ๏ผๆฏๆ่ช็ถ่ฏญ่จๆ้ฎ
- **`ocr_image`** โ OCR ๆๅญ่ฏๅซ๏ผๆฏๆ็บฏๆๆฌใMarkdownใJSON ่พๅบ
- **`compare_images`** โ ๅฏนๆฏ 2โ4 ๅผ ๅพๅ๏ผ่ฏๅซๅทฎๅผๅ็ธไผผไนๅค
- **`analyze_video`** โ ๅๆ่ง้ขๅ
ๅฎน๏ผ้่ฆ Qwen3-VL ็ญๆฏๆ่ง้ข็ๆจกๅ๏ผ
### ๅฟซ้ๅผๅง
```bash
git clone https://github.com/Loveacup/vision-mcp-server.git
cd vision-mcp-server
npm install && npm run build
```
้
็ฝฎ `.env`๏ผ
```bash
VISION_BASE_URL=http://your-server:port/v1/chat/completions
VISION_MODEL=Qwen3-VL-32B
VISION_API_KEY=your-api-key
```
ๅจ Claude Code ็ `~/.mcp.json` ไธญๆทปๅ ๏ผ
```json
{
"mcpServers": {
"vision": {
"command": "node",
"args": ["/path/to/vision-mcp-server/dist/index.js"],
"env": {
"VISION_BASE_URL": "http://your-server:port/v1/chat/completions",
"VISION_MODEL": "Qwen3-VL-32B",
"VISION_API_KEY": "your-api-key"
}
}
}
}
```
ๅฐ `/path/to/vision-mcp-server` ๆฟๆขไธบๅฎ้
ๅฎ่ฃ
่ทฏๅพใ
TDQS
A3.5/5.0
Scored across 4 tools
Disambiguation5/5
Each tool targets a distinct task: image content analysis, video analysis, image comparison, and text extraction. There is no overlap in purpose, making selection clear.
Naming Consistency5/5
All tools follow a consistent verb_noun pattern (analyze_image, analyze_video, compare_images, ocr_image), with no mixing of styles.
Tool Count4/5
With 4 tools, the set is focused and not overwhelming. It covers core vision tasks, though a few more (e.g., image generation) could be added for broader scope.
Completeness4/5
The tools cover image/video analysis, OCR, and comparison. Minor gaps exist (e.g., image metadata extraction), but the surface is sufficient for common vision use cases.
Maintenance
ActivityInactive
ResponsivenessUnresponsive