vlm-mcp-server
Enables vision and video analysis tasks using locally hosted models via Ollama's OpenAI-compatible API.
Enables vision and video analysis tasks such as UI-to-code conversion, OCR, error diagnosis, diagram analysis, data visualization insights, and video content analysis using OpenAI's Chat Completions or Responses API.
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., "@vlm-mcp-serverAnalyze this error screenshot and suggest fixes"
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.
VLM MCP Server
中文文档 | English

A Model Context Protocol (MCP) server providing vision & video analysis tools, configurable with any model provider.
This is a reverse-engineered and extended reimplementation of @z_ai/mcp-server (Apache-2.0, credit to Chao Gong, Lei Yuan / Z.AI). It introduces a provider abstraction layer so the same set of tools can run against any of three API families:
Chat Completions — OpenAI-compatible
POST {base}/chat/completions(OpenAI, Z.AI, Zhipu, OpenRouter, Together, Groq, DeepSeek, Moonshot, local Ollama / LM Studio, …)Responses — OpenAI
POST {base}/responses(gpt-4o, o-series reasoning models)Anthropic Messages —
POST {base}/v1/messages(Claude, and Anthropic-compatible gateways)
Quick Start
npx -y @syntx-ai/vlm-mcp-serverThat's it for the server side — it speaks MCP over stdio. You need to configure it in your MCP client. Pick your provider and set three environment variables:
Provider | Environment variables |
Chat Completions |
|
Responses |
|
Anthropic |
|
Claude Code one-liner (Chat Completions example — replace with your values):
claude mcp add -s user vlm-mcp-server \
--env OPENAI_CHAT_COMPLETIONS_API_KEY=sk-... \
OPENAI_CHAT_COMPLETIONS_BASE_URL=https://api.openai.com/v1/ \
OPENAI_CHAT_COMPLETIONS_MODEL=gpt-4o \
-- npx -y @syntx-ai/vlm-mcp-serverFor other clients (Cline, OpenCode, Crush, Roo Code, …), see Client Configuration.
Related MCP server: mcp-see
Available Tools
Image Analysis
Tool | Description |
| Convert UI screenshots to code, prompts, specs, or descriptions |
| OCR — extract code, terminal output, or text from screenshots |
| Analyze error messages and stack traces, suggest fixes |
| Analyze architecture, flowchart, UML, ER, and sequence diagrams |
| Extract insights, trends, and anomalies from charts |
| Visual regression — compare expected vs actual UI, prioritize issues |
| General-purpose image analysis (fallback) |
Video Analysis
Tool | Description |
| Video content analysis (local files or URLs, ≤8MB, MP4/MOV/M4V) |
Configuration
The server loads variables from a .env file at startup (real environment variables take precedence). Three layers are supported; precedence is per-provider groups > generic > legacy.
Per-provider groups
Configure each API family independently. auto picks the first group with both a key and a base URL set.
Variable group | API family |
| Chat Completions |
| Responses |
| Anthropic Messages |
Generic variables
Variable | Description | Default |
| API key | (required) |
| Provider API root | Zhipu default |
| Model name |
|
| Provider family: |
|
| Sampling temperature |
|
| Top-p |
|
| Max output tokens |
|
| Request timeout (ms) |
|
| Retry attempts |
|
| Enable provider-specific reasoning / thinking request fields. Off by default for broad OpenAI-compatible Chat Completions support. |
|
|
|
|
| Custom log file path |
|
Provider auto-detection
In auto mode (when no OPENAI_* group is set), the provider is inferred as follows:
Base URL contains
anthropic, or key starts withsk-ant→anthropicOtherwise →
chat-completions(the most broadly compatible default)
Usage Examples
Once the server is installed in your client, you can use it through conversation. For example, in Claude Code, type describe this demo.png — the MCP Server will process the image and return a description (the image must exist in the current directory).
Outside Claude Code, pasting an image directly into the client will NOT invoke this MCP Server — the client encodes the image and calls the model API itself. Best practice: place images in a local directory and refer to them by name or path in conversation, e.g.
What does demo.png describe?
Troubleshooting
Run the server directly from the command line to verify it starts, isolating environment / permission issues:
# Linux / macOS
OPENAI_CHAT_COMPLETIONS_API_KEY=sk-... \
OPENAI_CHAT_COMPLETIONS_BASE_URL=https://api.openai.com/v1/ \
OPENAI_CHAT_COMPLETIONS_MODEL=gpt-4o \
npx -y @syntx-ai/vlm-mcp-server
# Windows CMD
set OPENAI_CHAT_COMPLETIONS_API_KEY=sk-... && set OPENAI_CHAT_COMPLETIONS_BASE_URL=https://api.openai.com/v1/ && set OPENAI_CHAT_COMPLETIONS_MODEL=gpt-4o && npx -y @syntx-ai/vlm-mcp-server
# Windows PowerShell
$env:OPENAI_CHAT_COMPLETIONS_API_KEY="sk-..."; $env:OPENAI_CHAT_COMPLETIONS_BASE_URL="https://api.openai.com/v1/"; $env:OPENAI_CHAT_COMPLETIONS_MODEL="gpt-4o"; npx -y @syntx-ai/vlm-mcp-serverIf it starts successfully, the environment is correct — the issue is likely in the client's MCP config; double-check it.
If it fails, investigate the error message (pasting it to an LLM for analysis is recommended).
Common issues
Connection failure
Ensure Node.js 18 or newer is installed.
Run
node -vandnpx -vto confirm the runtime is available.Verify the environment variables (
OPENAI_*triple orVLM_*) are set correctly.
Invalid API Key
Confirm the API Key was copied correctly.
Check that the API Key is activated.
Ensure the selected provider family matches the API Key (Chat Completions / Responses / Anthropic).
Check that the API Key has sufficient balance.
Connection timeout
Check your network connection.
Check firewall settings.
Try switching to a different provider family or base URL.
Increase the timeout (
VLM_TIMEOUT, default 300000ms).
Architecture
src/
├── index.ts # Entry point: starts the MCP server, registers all tools
├── types/ # Error types (McpError, ApiError, ValidationError, …)
├── core/
│ ├── environment.ts # Env config (VLM_* + OPENAI_* groups), URL resolution
│ ├── chat-service.ts # Delegates to the active VisionProvider
│ ├── file-service.ts # File validation + base64 encoding (image/video)
│ ├── base-image-service.ts # Shared image-processing logic for all image tools
│ ├── api-common.ts # Message builders, response helpers, retry wrapper
│ ├── error-handler.ts # Error hierarchy + handling/recovery strategies
│ └── logger.ts # stderr + file logger (keeps stdout JSON-clean)
├── providers/ # Pluggable model-provider abstraction
│ ├── types.ts # VisionProvider interface, ChatMessage, postJson helper
│ ├── chat-completions.ts # OpenAI-compatible Chat Completions
│ ├── responses.ts # OpenAI Responses API
│ ├── anthropic.ts # Anthropic Messages API
│ └── index.ts # Provider selection (VLM_PROVIDER / auto-infer)
├── prompts/ # System prompts for each specialized tool
└── tools/ # 8 tool registrations (7 image + 1 video)The provider layer (src/providers/) is the key extension. Each provider implements a VisionProvider interface that takes normalized ChatMessage[] (the OpenAI Chat Completions content-part format as internal lingua franca) and translates it to the provider's wire format. chat-service.ts simply delegates to the resolved provider, so none of the tool code needed to change.
License
Apache-2.0
Available Tools
8 toolsanalyze_data_visualizationA
Analyze data visualizations, charts, graphs, and dashboards to extract insights and trends.
Use this tool ONLY when the user has a data visualization image and wants to understand the data patterns or metrics. This tool specializes in interpreting visual data representations.
Do NOT use for: UI mockups, error messages, or technical architecture diagrams.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | What insights or information you want to extract from this visualization. | |
| image_source | Yes | Local file path or remote URL to the image | |
| analysis_focus | No | Optional: specify what to focus on (e.g., 'trends', 'anomalies', 'comparisons', 'performance metrics'). Leave empty for comprehensive analysis. |
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 states the tool specializes in interpreting visual data representations but does not disclose potential limitations (e.g., image format requirements, handling of multiple images, or that it returns textual insights). The core behavior is clear, but additional context would improve transparency.
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, front-loaded with the main purpose, then usage guidance, then exclusions. Every sentence adds value and there is no redundancy or fluff.
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?
This is a simple tool with no output schema and no annotations. The description adequately covers purpose, scope, and exclusions. It lacks explicit mention of the output format, which would be helpful for the agent, but the core context is complete enough for selection and invocation.
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 description coverage is 100%, so each parameter (prompt, image_source, analysis_focus) already has a description. The tool description does not add any extra meaning about parameters, which is acceptable given the schema fully covers them. Baseline 3 applies.
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 uses a specific verb and resource: 'Analyze data visualizations, charts, graphs, and dashboards to extract insights and trends.' It clearly distinguishes this tool from siblings like extract_text_from_screenshot and understand_technical_diagram by focusing on data visualizations.
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?
Explicit guidance is provided: 'Use this tool ONLY when the user has a data visualization image and wants to understand the data patterns or metrics.' It also lists exclusions (UI mockups, error messages, technical architecture diagrams), making when/when-not usage very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_imageA
General-purpose image analysis for scenarios not covered by specialized tools.
Use this tool as a FALLBACK when none of the other specialized tools (ui_to_artifact, extract_text_from_screenshot, diagnose_error_screenshot, understand_technical_diagram, analyze_data_visualization, ui_diff_check) fit the user's need.
This tool provides flexible image understanding for any visual content.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Detailed description of what you want to analyze, extract, or understand from the image. Be specific about your requirements. | |
| image_source | Yes | Local file path or remote URL to the image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of disclosure. It accurately describes a read-only analysis tool and mentions flexibility, but does not disclose output format, limitations, or error behavior. This adds some context but leaves gaps common for analysis tools.
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 two short sentences that front-load the purpose and usage. It includes a list of siblings but keeps it compact and relevant. Every sentence earns its place without bloat.
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 description sufficiently covers the fallback context and general capabilities. Given the simplicity of the tool (2 params, no output schema), it does not need to explain return values. It could mention limitations of the fallback nature, but overall it is complete enough for effective selection.
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 description coverage is 100%, and both parameters are well-described in the schema. The tool description itself adds no extra parameter-specific meaning beyond noting the tool's general purpose. Baseline for full schema coverage is 3.
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 this is a general-purpose image analysis tool, with a specific verb ('analyze') and resource ('image'). It explicitly lists sibling tools, distinguishing itself as a fallback rather than a specialized handler, which makes its purpose unmistakable.
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 explicit usage guidance: 'Use this tool as a FALLBACK when none of the other specialized tools... fit the user's need.' It names the alternatives, making the selection criteria very clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_videoA
Analyze video content using advanced AI vision models.
Use this tool when the user wants to:
Understand what happens in a video
Extract key moments or actions from video
Analyze video content, scenes, or sequences
Get descriptions of video footage
Identify objects, people, or activities in video
Supports both local files and remote URL. Maximum file size: 8MB. Supports MP4, MOV, M4V formats.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Detailed text prompt describing what to analyze, extract, or understand from the video | |
| video_source | Yes | Local file path or remote URL to the video (supports MP4, MOV, M4V) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for behavioral transparency. It discloses practical constraints: 'Maximum file size: 8MB' and 'Supports MP4, MOV, M4V formats,' which are valuable. However, it does not describe the output format, failure modes, or any asynchronous behavior, leaving some uncertainty about what the tool actually returns.
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 well-structured: a one-sentence summary, a concise bulleted list of use cases, and a final sentence with constraints. It is front-loaded with the primary purpose, and every line contributes meaningful information without unnecessary verbosity.
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 relatively simple tool with only two parameters and no output schema, the description covers the essential context: what it does, when to use it, and practical limits. The main gap is the lack of explicit output behavior, but the use cases imply textual descriptions, so it is reasonably complete.
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 already has 100% description coverage, with both 'video_source' and 'prompt' adequately described. The tool description adds no additional semantic meaning beyond what the schema provides (e.g., it repeats format support but does not clarify prompt syntax or expected detail level), so the baseline score of 3 is appropriate.
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 and resource: 'Analyze video content using advanced AI vision models.' It further distinguishes itself from siblings (e.g., analyze_image) by focusing exclusively on video and listing concrete use cases like 'Extract key moments' and 'Identify objects, people, or activities in video'.
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 provides explicit when-to-use guidance through the bulleted 'Use this tool when the user wants to:' list, covering multiple video analysis intents. It does not, however, mention when not to use it or name alternative tools (like analyze_image for static images), leaving the exclusion criteria implicit based on the sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_error_screenshotA
Diagnose and analyze error messages, stack traces, and exception screenshots.
Use this tool ONLY when the user has an error screenshot and needs help understanding or fixing it. This tool specializes in error analysis and provides actionable solutions.
Do NOT use for: code extraction, UI analysis, or diagram understanding.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Description of what you need help with regarding this error. Include any relevant context about when it occurred. | |
| context | No | Optional: additional context about when the error occurred (e.g., 'during npm install', 'when running the app', 'after deployment'). Helps with more accurate diagnosis. | |
| image_source | Yes | Local file path or remote URL to the image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It communicates that the tool specializes in error analysis and 'provides actionable solutions,' implying a read-analyze-advise workflow. While it doesn't mention edge cases like image quality or privacy, the core behavior is clear and not contradicted by any annotations.
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 and well-structured, front-loading the primary function and then providing usage guidance and exclusions in separate short paragraphs. Every sentence contributes meaningful information without redundancy.
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 is simple with only 3 parameters, all documented in the schema. The description explains when to use it and what it returns ('actionable solutions'), which is enough for selection and invocation. It does not specify failure modes (e.g., unreadable images), but this is not essential for basic use. The explicit do-not-use list adds valuable contextual grounding.
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 provides full descriptions for all three parameters, achieving 100% coverage, so the baseline of 3 applies. The description adds context about the tool's purpose but does not introduce parameter-level details beyond the schema, which is appropriate given the strong schema coverage.
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 phrase 'Diagnose and analyze' and identifies the exact resource: 'error messages, stack traces, and exception screenshots.' It also differentiates itself from sibling tools by explicitly excluding code extraction, UI analysis, and diagram understanding, making its purpose unmistakable.
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 explicitly states when to use the tool: 'Use this tool ONLY when the user has an error screenshot and needs help understanding or fixing it.' It also provides clear exclusion criteria ('Do NOT use for: code extraction, UI analysis, or diagram understanding'), offering strong guidance relative to the sibling image analysis tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_text_from_screenshotA
Extract and recognize text from screenshots using advanced OCR capabilities.
Use this tool ONLY when the user has a screenshot containing text and wants to extract it. This tool specializes in OCR for code, terminal output, documentation, and general text extraction.
Do NOT use for: UI design conversion, error diagnosis, or diagram understanding.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Instructions for text extraction. Specify what type of text to extract and any formatting requirements. | |
| image_source | Yes | Local file path or remote URL to the image | |
| programming_language | No | Optional: specify the programming language if the screenshot contains code (e.g., 'python', 'javascript', 'java'). Leave empty for auto-detection or non-code text. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so description carries full burden. It discloses scope (OCR for code/terminal/docs) and non-goals, but fails to disclose output format, whether bounding boxes/layout are preserved, accuracy limitations, or behavior on poor images. For a no-output-schema tool, this is a substantive 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?
Four sentences, front-loaded with purpose, each sentence adds distinct information (definition, when-to-use, specialties, exclusions). No fluff; 'advanced OCR capabilities' is slightly filler but harmless.
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?
Covers purpose, usage, exclusions, and parameter coverage via schema. However, with no output schema and no mention of return format or failure behavior, an agent cannot fully anticipate tool output. Given moderate complexity, this is a clear gap.
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 description coverage is 100%, so all three parameters (image_source, prompt, programming_language) are already documented. Description adds minor context about OCR specializations that hints at prompt/language usage, but no syntax-level detail, so baseline 3 is appropriate.
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?
Description opens with specific verb+resource: 'Extract and recognize text from screenshots using advanced OCR capabilities.' It clearly distinguishes from siblings by explicitly listing exclusions (UI design conversion, error diagnosis, diagram understanding), making purpose unambiguous.
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?
Explicitly states when to use: 'ONLY when the user has a screenshot containing text and wants to extract it.' Provides positive context (code, terminal output, documentation) and a clear 'Do NOT use for' list that semantically maps to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_diff_checkA
Compare two UI screenshots to identify visual differences and implementation discrepancies.
Use this tool ONLY when the user wants to compare an expected/reference UI with an actual implementation. This tool is specialized for UI quality assurance and design-to-implementation verification.
Do NOT use for: general image comparison, error diagnosis, or analyzing single UIs.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Instructions for the comparison. Specify what aspects to focus on or what level of detail is needed. | |
| actual_image_source | Yes | Local file path or remote URL to the image | |
| expected_image_source | Yes | Local file path or remote URL to the image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It states the tool identifies visual differences and implementation discrepancies, but does not disclose whether it is non-mutating, what output format it returns, or any limitations/error behavior. The read-only nature is inferable from 'compare' and 'diff_check', but not fully explicit.
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: four sentences, with the core purpose front-loaded in the first sentence. The subsequent sentences add value by specifying when to use, specialization, and exclusions without unnecessary repetition or fluff.
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 tool with three simple string parameters and no output schema, the description covers purpose, use cases, and exclusions effectively. It does not explain the return value or output format, but that is not critical for such a straightforward comparison tool; the description is sufficiently complete for an agent to select and invoke it correctly.
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 description coverage is 100%, with each parameter (expected_image_source, actual_image_source, prompt) described as local file path/remote URL or instructions. The description adds context by mapping 'expected/reference' to expected_image_source and 'actual implementation' to actual_image_source, but does not go beyond the schema in explaining parameter syntax or usage.
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 'Compare two UI screenshots to identify visual differences and implementation discrepancies', using a specific verb and resource. It also distinguishes this tool from siblings by focusing on UI quality assurance and design-to-implementation verification.
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 explicitly says 'Use this tool ONLY when the user wants to compare an expected/reference UI with an actual implementation' and lists clear exclusions: 'Do NOT use for: general image comparison, error diagnosis, or analyzing single UIs.' This provides effective when/when-not guidance, implicitly steering users to sibling tools like analyze_image or diagnose_error_screenshot.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_to_artifactA
Convert UI screenshots into various artifacts: code, prompts, design specifications, or descriptions.
Use this tool ONLY when the user wants to:
Generate frontend code from UI design (output_type='code')
Create AI prompts for UI generation (output_type='prompt')
Extract design specifications (output_type='spec')
Get natural language description of the UI (output_type='description')
Do NOT use for: screenshots containing text/code to extract, error messages, diagrams, or data visualizations.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | Detailed instructions describing what to generate from this UI image. Should clearly state the desired output and any specific requirements. | |
| output_type | Yes | Type of output to generate. Options: 'code' (generate frontend code), 'prompt' (generate AI prompt for recreating this UI), 'spec' (generate design specification document), 'description' (natural language description of the UI). | |
| image_source | Yes | Local file path or remote URL to the image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosure. It reveals behavioral limitations (unsuitable for text/code extraction, error messages, etc.) and conveys the core transformation behavior. It stops short of detailing output formats, failure modes, or prerequisites, but the provided context is largely sufficient.
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 well-organized into a clear opening sentence, a bulleted list of use cases, and an explicit exclusion list. While slightly longer than the minimal viable, every section contributes to effective instruction without redundancy.
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 description, combined with the fully described input schema, covers the tool's purpose, valid output types, specific use cases, and content exclusions. The absence of an output schema is offset by the schema's enum descriptions, making the overall description complete enough for an agent to invoke the tool correctly.
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 description coverage is 100%, so the baseline is 3. The description's bullet list largely mirrors the output_type enum values already documented in the schema, adding little new parameter-level meaning. No additional detail is given for image_source or prompt beyond their schema descriptions.
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: converting UI screenshots into code, prompts, specs, or descriptions. It differentiates itself from sibling tools by explicitly listing excluded content types like text/code extraction, error messages, diagrams, and data visualizations, which correspond to other tools' scopes.
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 provides explicit when-to-use scenarios for each output_type and lists concrete 'Do NOT use' cases (screenshots with extractable text/code, error messages, diagrams, data visualizations), making tool selection unambiguous for the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
understand_technical_diagramA
Analyze and explain technical diagrams including architecture diagrams, flowcharts, UML, ER diagrams, and system design diagrams.
Use this tool ONLY when the user has a technical diagram and wants to understand its structure or components. This tool specializes in interpreting visual technical documentation.
Do NOT use for: UI screenshots, error messages, or data visualizations/charts.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | What you want to understand or extract from this diagram. | |
| diagram_type | No | Optional: specify the diagram type if known (e.g., 'architecture', 'flowchart', 'uml', 'er-diagram', 'sequence'). Leave empty for auto-detection. | |
| image_source | Yes | Local file path or remote URL to the image |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the tool's specialty and scope but doesn't mention output format, limitations, or any requirements beyond image input. For an analysis tool, this is adequate but not rich; no contradictions with annotations (none present).
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 four sentences, each serving a purpose: defining the tool, giving usage directives, stating its specialization, and listing exclusions. There is no fluff or redundancy; every sentence earns its place.
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 lacking an output schema and annotations, the description provides a complete picture of the tool's purpose, scope, and usage boundaries. The main gap is the unspecified return format, but 'explain' implies a text response, so the completeness is high.
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 description coverage is 100%, meaning each parameter (image_source, prompt, diagram_type) has its own description. The tool description adds no additional parameter-level semantics beyond what the schema already provides, so a baseline of 3 is appropriate.
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 verb+resource: 'Analyze and explain technical diagrams' and enumerates specific types (architecture, flowcharts, UML, ER, system design). It distinctly separates this from siblings by providing explicit exclusions, making the purpose unambiguous.
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 explicit when-to-use ('Use this tool ONLY when...') and when-not-to-use ('Do NOT use for: UI screenshots...') but does not name specific alternative tools. Despite this, it offers clear usage boundaries and context, which is nearly a 5 except for the missing explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each specialized tool targets a distinct visual content type (UI, text, errors, diagrams, charts, UI comparison), and the general analyze_image explicitly serves as a fallback for anything not covered. The routing guidelines in the descriptions prevent overlap and misselection.
All tools follow a consistent snake_case convention with action-oriented verbs (extract, diagnose, understand, analyze) followed by their target. Minor deviations: ui_to_artifact and ui_diff_check use compound phrases rather than a strict verb_noun form, but the pattern remains readable.
Eight tools provide a well-scoped set for a vision-language server: five specialized analyzers, one comparison tool, one general fallback, and one video tool. This falls comfortably within the ideal range and every tool addresses a meaningful use case.
The tool set covers the full spectrum of VLM analysis needs: UI, text, errors, diagrams, data visualizations, UI differences, general images, and videos. The fallback analyze_image ensures no input type falls through, making the surface complete.
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 Wan AI video generation
MCP server for Google Veo AI video generation
MCP server for building and testing AI agents with multi-model experimentation and insights.
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server for analyzing images using OpenRouter vision models, offering capabilities like automatic image resizing, model configuration, and handling custom queries about images.10MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that gives AI agents the ability to observe and understand images via multi-provider vision, object detection, hierarchical analysis, and color extraction.172MIT
- AlicenseAqualityCmaintenanceAn MCP server that provides image analysis capabilities using vision-capable AI models, including object detection, OCR, scene description, and image comparison.432MIT
- AlicenseAqualityBmaintenanceMCP server that analyzes images, reads code and ZIP archives, and provides text context for non-vision models.3172MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/syntx-ai/vlm-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server