GLM Vision MCP
Enables text-only reasoning models to see images by wrapping vision-language models as MCP tools, supporting image description, OCR, chart analysis, and custom questioning within MCP-compatible IDEs.
README
GLM Vision MCP
<p align="center"> <strong>Give any text-only reasoning model a pair of eyes.</strong> </p>
<p align="center"> An MCP (Model Context Protocol) server that wraps vision-language models — like <strong>GLM-4.6V-Flash</strong> — as callable tools, so text-only LLMs (DeepSeek-R1, Qwen3-Thinking, etc.) can <em>see</em> images inside Cursor, Trae CN, Cline, Claude Desktop, and any MCP-compatible agent. </p>
How It Works
┌─────────────────────────────────────────────────────────┐
│ Your IDE / Agent │
│ │
│ Text-only model (e.g. DeepSeek-R1) │
│ │ │
│ │ "What's in this screenshot?" │
│ ▼ │
│ MCP Tool: see_image(path, question) │
│ │ │
│ ▼ (stdio / MCP protocol) │
│ ┌──────────────────────────────────────────────────┐ │
│ │ GLM Vision MCP Server │ │
│ │ │ │
│ │ Reads image → base64 → sends to vision model │ │
│ │ (GLM-4.6V-Flash / GPT-4o / any VLM) │ │
│ │ │ │
│ │ Returns: "A login error dialog showing..." │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ Text-only model continues reasoning with vision data │
└─────────────────────────────────────────────────────────┘
You configure 3 things: model provider, model ID, and API key. The server handles everything else — image reading, base64 encoding, API calls, error handling.
Quick Start
1. Install
# From PyPI (once published) or from source:
pip install -e .
Or use directly with uv / pipx without installing:
# Using uv (recommended for MCP)
uv run glm-vision-mcp
2. Configure
The server reads configuration from environment variables:
| Variable | Required | Default | Description |
|---|---|---|---|
VISION_API_KEY |
✅ Yes | — | Your model provider's API key |
VISION_MODEL_ID |
✅ Yes | glm-4.6v-flash |
The vision model to use |
VISION_MODEL_PROVIDER |
✅ Yes | zhipu |
Provider name (see table below) |
VISION_BASE_URL |
❌ No | provider default | Custom API base URL |
VISION_MAX_TOKENS |
❌ No | 2048 |
Max response tokens |
VISION_TEMPERATURE |
❌ No | 0.4 |
Sampling temperature |
3. Add to Your IDE
Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in your project):
{
"mcpServers": {
"glm-vision": {
"command": "python",
"args": ["-m", "glm_vision_mcp"],
"env": {
"VISION_MODEL_PROVIDER": "zhipu",
"VISION_MODEL_ID": "glm-4.6v-flash",
"VISION_API_KEY": "your-zhipu-api-key-here"
}
}
}
}
Trae CN
Add to Trae's MCP settings (设置 → MCP):
{
"mcpServers": {
"glm-vision": {
"command": "python",
"args": ["-m", "glm_vision_mcp"],
"env": {
"VISION_MODEL_PROVIDER": "zhipu",
"VISION_MODEL_ID": "glm-4.6v-flash",
"VISION_API_KEY": "your-zhipu-api-key-here"
}
}
}
}
Cline (VS Code)
Add to ~/.cline/mcp_settings.json:
{
"mcpServers": {
"glm-vision": {
"command": "python",
"args": ["-m", "glm_vision_mcp"],
"env": {
"VISION_MODEL_PROVIDER": "zhipu",
"VISION_MODEL_ID": "glm-4.6v-flash",
"VISION_API_KEY": "your-zhipu-api-key-here"
},
"disabled": false,
"autoApprove": []
}
}
}
Claude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"glm-vision": {
"command": "python",
"args": ["-m", "glm_vision_mcp"],
"env": {
"VISION_MODEL_PROVIDER": "zhipu",
"VISION_MODEL_ID": "glm-4.6v-flash",
"VISION_API_KEY": "your-zhipu-api-key-here"
}
}
}
}
Generic MCP Client (any MCP-compatible tool)
{
"mcpServers": {
"glm-vision": {
"command": "python",
"args": ["-m", "glm_vision_mcp"],
"env": {
"VISION_MODEL_PROVIDER": "zhipu",
"VISION_MODEL_ID": "glm-4.6v-flash",
"VISION_API_KEY": "your-api-key"
}
}
}
}
Tip: If you installed via
uv, use"command": "uv"and"args": ["run", "glm-vision-mcp"]instead.
Supported Providers
| Provider | VISION_MODEL_PROVIDER |
Default Base URL | Example Models |
|---|---|---|---|
| Zhipu (智谱) | zhipu |
https://open.bigmodel.cn/api/paas/v4 |
glm-4.6v-flash, glm-4v-plus |
| OpenAI | openai |
https://api.openai.com/v1 |
gpt-4o, gpt-4o-mini |
| DeepSeek | deepseek |
https://api.deepseek.com/v1 |
deepseek-vl |
| Moonshot (Kimi) | moonshot |
https://api.moonshot.cn/v1 |
moonshot-v1-8k-vision |
| SiliconFlow | siliconflow |
https://api.siliconflow.cn/v1 |
Qwen/Qwen2-VL-72B |
| Custom | custom |
(you set VISION_BASE_URL) |
Any OpenAI-compatible VLM |
Using a Custom Endpoint
Set VISION_BASE_URL to point to your own server (vLLM, Ollama, LM Studio, etc.):
{
"env": {
"VISION_MODEL_PROVIDER": "custom",
"VISION_MODEL_ID": "your-model-name",
"VISION_API_KEY": "any-or-empty",
"VISION_BASE_URL": "http://localhost:8000/v1"
}
}
Tools
The server exposes 4 tools. Your IDE's agent will automatically call them when it needs vision:
see_image — Core Vision Tool
Ask any question about an image.
see_image(image, question="What is in this image?")
- image: File path, URL, or base64 string
- question: What you want to know (default: "What is in this image?")
describe_image — Image Description
Generate a text description/caption.
describe_image(image, detail_level="detailed")
- detail_level:
"brief"|"detailed"|"exhaustive"(default:"detailed")
extract_text — OCR
Extract all visible text from an image.
extract_text(image, language_hint="Chinese")
- language_hint: Optional — e.g.
"Chinese","English","mixed"
analyze_chart — Chart & Diagram Analysis
Analyze charts, graphs, architecture diagrams, or UI screenshots.
analyze_chart(image, question="")
- question: Optional specific question (default: general analysis)
Usage Example
Once configured, just talk to your IDE's agent normally:
You: "Look at the screenshot at
/tmp/error.png— what's wrong?"
The agent will:
- Call
see_image("/tmp/error.png", "What error is shown?") - The MCP server sends the image to GLM-4.6V-Flash
- GLM returns: "The dialog shows a 'Connection Refused' error..."
- Your text-only model uses that answer to help you
Getting an API Key
Zhipu (智谱) — Free Tier Available
- Visit https://open.bigmodel.cn
- Sign up / log in
- Go to API Keys → Create new key
- Copy the key (format:
xxxxxxxx.xxxxxxxx)
GLM-4.6V-Flash offers free quota — great for testing!
OpenAI
- Visit https://platform.openai.com/api-keys
- Create a new key
Development
Project Structure
glm-vision-mcp/
├── src/glm_vision_mcp/
│ ├── __init__.py
│ ├── __main__.py # python -m glm_vision_mcp
│ ├── server.py # MCP server + tool definitions
│ ├── config.py # Env-var config loader
│ ├── utils.py # Image encoding utilities
│ └── providers/
│ ├── base.py # VisionProvider (shared HTTP logic)
│ ├── zhipu.py # Zhipu GLM provider
│ ├── openai_compat.py # Generic OpenAI-compatible provider
│ └── registry.py # Provider name → class mapping
├── examples/
│ └── quickstart.py
├── pyproject.toml
├── requirements.txt
└── README.md
Running Tests
pip install -e ".[dev]"
pytest
Adding a New Provider
- Create
src/glm_vision_mcp/providers/my_provider.py:
from glm_vision_mcp.providers.base import VisionProvider
class MyProvider(VisionProvider):
def _build_headers(self):
# Custom auth if needed
return {"X-Api-Key": self.config.api_key}
- Register in
providers/registry.py:
_PROVIDERS["my_provider"] = MyProvider
FAQ
Q: Can I use this with a non-vision model? No — the configured model must support vision input (images). If you're unsure, GLM-4.6V-Flash is a good free option.
Q: Does it work with local images? Yes. Pass a file path and the server will read and base64-encode it automatically.
Q: How fast is it? Depends on the model provider. GLM-4.6V-Flash is very fast (typically 1-3 seconds per image).
Q: Can multiple images be analyzed at once?
Currently each tool call handles one image. For multi-image comparison, call see_image multiple times or extend the tools.
License
MIT © 2026 xiayuyang750
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.