Vision MCP Server
The Vision MCP Server adds visual understanding to text-only LLMs and coding agents through MCP, offering task-oriented vision tools and an optional HTTP proxy.
UI/Code Generation (
ui_to_artifact): Convert UI screenshots into code, prompts, specs, or descriptions.Text Extraction (
extract_text_from_screenshot): Extract visible text, source code, terminal output, or config content from screenshots.Error Diagnosis (
diagnose_error_screenshot): Diagnose errors or stack traces shown in screenshots.Diagram Understanding (
understand_technical_diagram): Understand architecture, UML, flowcharts, ER, or system diagrams.Data Visualization Analysis (
analyze_data_visualization): Analyze charts and plots for trends, anomalies, comparisons, and distributions.Visual Regression Testing (
ui_diff_check): Compare expected vs actual UI screenshots to detect visual differences.General Image Analysis (
analyze_image/image_analysis): Perform open-ended visual analysis on any image.Video Analysis (
analyze_video/video_analysis): Experimental/unsupported analysis for MP4, MOV, or M4V files.
Infrastructure features:
HTTP Vision Proxy for OpenAI Chat/Responses and Anthropic Messages, converting image blocks into text descriptions before forwarding to a text-only upstream model; recursively extracts images including from nested tool results and passes through non-image requests unchanged.
Claude Code Auto classifier compatibility via request rewriting and response normalization for Anthropic-compatible gateways.
Multi-provider routing (AGY, Codex, Gemini, OpenCode) with automatic fallback.
Unified JSON results regardless of the provider used.
CLI lifecycle management (start, stop, restart, doctor) and a shared local server that can be reused by multiple MCP clients.
Allows using Google's Gemini API for vision analysis, including image understanding, OCR, and UI comparison.
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., "@Vision MCP Serverextract text from this screenshot: /tmp/screenshot.png"
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.
Vision MCP Server
English | 简体中文
lm-visual-mcp gives text-only LLMs and coding agents visual input through the
Model Context Protocol. It is built from four
modules — mcp, server, providers, and vision — and also ships a transparent HTTP
proxy that rewrites image blocks in OpenAI or Anthropic requests into text descriptions
before forwarding them upstream, plus Claude Code Auto classifier interoperability.
This version (v0.2.0) supports image recognition only. Video input is no longer declared or accepted anywhere in the stack.
Modules
Module | Responsibility |
| Thin stdio MCP entry. Every tool call is forwarded to the shared server — no embedded vision service, so rate limiting is always centralized. |
| The shared singleton process: |
| Provider implementations behind a type registry with per-provider rate limiting (rpm / concurrency). Each provider implements one or both behavior groups: IMAGE ( |
| Image-recognition orchestration: concurrency gate + the provider router that walks the configured |
Hooks
A hook's basic interface is process(ctx) -> HookResult: it may rewrite the request and
let it continue down the pipeline, or intercept it by returning a response that
goes straight back to the client. Hooks may also implement process_response to rewrite
the upstream response (used by the classifier hook).
Image hook — detects image-bearing requests, describes each image once (SHA-256 cache) through the image chain, and replaces the image block with text. Every rewritten block records the image's absolute local path (
[Image N: /abs/path.png]), and staged files persist, so the text model can reference or re-submit the image later.Classifier hook — detects Claude Code Auto classifier requests and delegates to the classifier chain. Only API providers that implement classifier handling (
rewrite_classifier_request/rewrite_classifier_response) rewrite these; local CLI providers (agy, codex) pass them through byte-for-byte untouched.
Both hooks accept a models allowlist — empty = apply to all models, non-empty = only
the listed models run through the router; everything else passes through untouched.
Providers, dual chains & fallback
The top-level providers: section defines provider instances (the single source of
truth, referenced by name). vision then references those names in two independent
execution chains:
image_chain— image analysis fallback order (first success wins).classifier_chain— classifier handling order (first provider that reports a changed rewrite wins; if none implements classifier handling, requests pass through untouched).
The router never hardcodes providers — type is resolved through a registry, so adding
one is a class + one registry line + config.
Rate limiting lives inside each provider (rate_limit: {rpm, concurrency} per
entry, both optional). When a limit is hit the provider raises rate_limited and the
router immediately downgrades to the next provider in its chain.
agy— AGY CLI (-p+--add-dir+ sandbox), unsupported-vision verdict caching. IMAGE only; no classifier handling.codex—codex execwith--output-schema, read-only sandbox. IMAGE only.gemini— google-genai API (api_key_env: GEMINI_API_KEY). IMAGE + classifier (honorsdisable_thinking).opencode— direct OpenAI-compatible API;mode: go(default,https://opencode.ai/zen/go/v1) ormode: zen,base_urloverrides mode. IMAGE + classifier; no local CLI required.volcengine— Volcano Ark;mode: agent(Anthropic Messages/v1/messagesoverapi/plan),mode: coding(api/coding), ormode: api(OpenAI chat-completionsapi/v3). IMAGE + classifier.
Related MCP server: MCP Vision Server
Architecture
MCP client process (agent config: --start-server / --no-start-server)
│ stdio
▼
mcp module (thin client)
│ loopback HTTP POST /vision/analyze
▼
server module (shared singleton)
├── vision endpoint ──► vision module
│ ├── concurrency gate
│ └── router walks image_chain: provider₁ → provider₂ → …
│ (each with its own rpm/concurrency limiter;
│ limit hit → fall back to the next)
└── hook proxy /proxy/<proto>/<base64url>[/suffix]
├── image hook → image chain (description rewrite, model-allowlist)
├── classifier hook → classifier chain (API-provider rewrite, model-allowlist /
│ byte-level passthrough when no provider handles it)
└── byte-level passthrough when no hook appliesQuick start
# agent MCP config (stdio) — starts the shared server if absent:
lm-visual-mcp
# …or never start the server from the MCP process (use an already-running one):
lm-visual-mcp --no-start-server # env: LM_VISUAL_MCP_START_SERVER=0
lm-visual-mcp start | stop | restart # manage the server singleton
lm-visual-mcp server # run the server in the foreground
lm-visual-mcp doctor # inspect configuration and providersCopy config.example.yaml to lm-visual-mcp.yaml (or ~/.config/lm-visual-mcp/)
to configure the listen address, hooks, providers and the two chains. Root nodes are
server / hooks / providers / vision / media / logging. There is no mcp:
section in the file — the start-server decision belongs to the agent's MCP config, not
to the YAML.
Example (top-level providers defines instances; vision declares the chains):
server:
host: 127.0.0.1
port: 8787
hooks:
image: { enabled: true, models: [] } # models empty = all models
classifier: { enabled: true, models: [] }
providers:
- name: agy
type: agy
command: agy
model: gemini-3.6-flash
effort: high
rate_limit: { rpm: 30, concurrency: 2 }
- name: gemini
type: gemini
api_key_env: GEMINI_API_KEY
disable_thinking: true
- name: opencode
type: opencode
mode: go # go | zen
api_key_env: OPENCODE_API_KEY
- name: volcengine
type: volcengine
mode: agent # agent | coding | api
api_key_env: VOLCENGINE_API_KEY
vision:
timeout: 120
max_concurrency: 2
image_chain: [agy, gemini, opencode] # first success wins
classifier_chain: [gemini] # only API providers belong hereLocal CLI providers (agy, codex) have no classifier handling; put only API providers
(gemini / opencode / volcengine) on the classifier_chain.
Tools
ui_to_artifact, extract_text_from_screenshot, diagnose_error_screenshot,
understand_technical_diagram, analyze_data_visualization, ui_diff_check,
analyze_image (+ image_analysis alias). Provider, model, credentials, fallback
policy, timeout are server configuration and never appear in tool schemas.
Available Tools
10 toolsanalyze_data_visualizationB
Analyze a chart/plot (trends, anomalies, comparisons, distribution).
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| image_source | Yes | ||
| analysis_focus | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It only states the types of analysis performed, but does not mention how the tool processes input, what output to expect, limitations, or any side effects. The description provides minimal insight into the tool's behavior.
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 a single, concise sentence with no redundant filler. It is appropriately brief, though it sacrifices informative content for brevity. The structure is simple and front-loaded with the core action.
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 three parameters, no annotations, and no output schema, leaving the description as the primary source of context. However, the description only covers the high-level purpose and does not address parameter usage, expected output format, or edge cases, making it insufficient for robust agent guidance.
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 0%, meaning the input schema provides no property descriptions. The tool description does not mention any of the three parameters (image_source, prompt, analysis_focus) or explain their roles, forcing the agent to infer parameter meaning solely from 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 identifies the tool's purpose with a specific verb ('Analyze') and resource ('chart/plot'), and lists concrete analysis types (trends, anomalies, comparisons, distribution). It distinguishes itself from siblings like analyze_image or understand_technical_diagram by focusing specifically 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?
The description implies usage for chart/plot analysis but provides no explicit guidance on when to use this tool versus alternatives such as analyze_image or understand_technical_diagram. There are no exclusions or preferred scenarios mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_imageC
General visual analysis of an image.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| image_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must shoulder the burden of disclosing behavior. It only says 'general visual analysis,' offering no details on expected inputs, outputs, limitations, or whether the operation is read-only. This is a significant 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 a single, front-loaded sentence with no unnecessary words, achieving maximal brevity. However, the extreme brevity sacrifices substance, though that is a completeness issue rather than a conciseness issue.
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 two required parameters and the absence of output schema and annotations, this description is grossly incomplete. It fails to explain the role of the prompt, acceptable formats for image_source, or any expected output structure.
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 schema lists two parameters with no descriptions (0% coverage), and the tool description does not mention them. The agent is left without any explanation of what 'image_source' or 'prompt' should contain or how they affect the analysis.
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 states a clear verb ('analysis') and resource ('image'), but 'general' is vague and does not distinguish from sibling 'image_analysis' which is virtually identical. It lacks specifics about the type of analysis performed.
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?
No guidance is provided on when to use this tool versus alternatives like 'image_analysis' or 'analyze_data_visualization'. The description gives no context about appropriate use cases or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_videoD
Analyze a video (mp4/mov/m4v).
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| video_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the behavioral disclosure burden, but it only says 'Analyze a video'. It does not state whether this is a read-only operation, what kind of analysis is performed (e.g., object detection, audio transcription), whether any resources are consumed, or what the output format is.
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 overly terse. 'Analyze a video' essentially restates the tool name, and the format list is the only added information. It is under-specified to the point of being nearly tautological, similar to the 'Process' calibration example.
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 lack of annotations, output schema, and parameter details, the description is grossly incomplete. It fails to explain how the tool operates, what the prompt is for, or how it differs from the sibling 'video_analysis', leaving the agent to guess.
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 schema has zero coverage and the description does not compensate. It does not explain the purpose of 'video_source' or 'prompt', nor does it clarify the expected input format for the video source or how the prompt influences the analysis.
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 states the tool analyzes video files and lists supported formats (mp4/mov/m4v), making the primary action clear. However, it does not distinguish this tool from the sibling 'video_analysis', which appears equally suited for the task.
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?
No guidance is provided about when to use this tool versus alternatives like 'video_analysis' or 'analyze_image'. There is no mention of prerequisites, exclusions, or context that would help an agent choose this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_error_screenshotB
Diagnose an error/stack trace shown in a screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| context | No | ||
| image_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavioral traits. It only restates the tool's apparent function and offers no details about limitations, how the diagnosis is generated, required image clarity, or whether any side effects occur. This is a significant 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 a single, clear sentence that is front-loaded with the core purpose. There is no fluff or redundancy, and every word contributes to the meaning. It is appropriately concise for a tool with a straightforward stated purpose.
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?
With no annotations, no output schema, and zero parameter documentation, the description alone must provide a complete picture. It fails to explain practical details such as how to construct the prompt, what image formats are acceptable, or what kind of diagnosis to expect. The tool appears complex enough that this one-sentence description is entirely inadequate.
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 0%, and the description does not compensate. It gives no explanation of what 'image_source' should point to, what should be included in 'prompt', or how the optional 'context' modifies behavior. The description is entirely unhelpful for understanding parameter 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 a specific verb and resource: 'Diagnose an error/stack trace shown in a screenshot.' It distinguishes this tool from sibling analysis tools like analyze_image or extract_text_from_screenshot by focusing on error/stack trace diagnosis rather than general analysis or text extraction.
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 context: use when you have a screenshot containing an error or stack trace to diagnose. It provides a clear scenario but does not explicitly exclude alternative tools or mention when not to use it, so it stops short of full explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_text_from_screenshotC
Extract visible text (OCR), source code, terminal/config content verbatim.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| image_source | Yes | ||
| programming_language | No |
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 disclosure. It does not mention read-only status, limitations, output format, or potential failures. The single sentence provides no additional transparency beyond the basic action.
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 a single, concise sentence that front-loads the primary action. Every word is purposeful, with no fluff or 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?
Given the absence of an output schema and annotations, the description should provide more context about how the prompt influences extraction, what the result looks like, and any constraints. The current description is a minimal statement of purpose, leaving significant gaps.
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 0%, so the description must compensate. It does not explain the 'prompt' parameter, the role of 'programming_language', or how 'image_source' should be provided. The mention of 'source code' hints at 'programming_language' but is insufficient.
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 function: extracting visible text, source code, and terminal/config content verbatim. It uses specific verbs and resources, and distinguishes its extractive nature from sibling analysis tools like analyze_image, though it does not explicitly name alternatives.
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?
No guidance is given on when to use this tool versus alternatives. The description only states what it does, without context on use cases, exclusions, or comparisons to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
image_analysisD
Alias for analyze_image.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| image_source | Yes |
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 merely says 'Alias for analyze_image,' which reveals nothing about read-only status, side effects, return format, permissions, or any other behavioral traits. The agent has no safety or behavior context whatsoever.
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 brief, making it concise in length, but it is under-specification rather than effective conciseness. It consists of only four words and fails to include any substantive information. The description does not earn its place because it provides no value beyond simply naming the 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?
Given the complete lack of annotations, output schema, and parameter descriptions, the tool is entirely under-documented. The description is insufficient for correct selection and invocation, as the agent must know what analyze_image does and how to fill the parameters. This is completely inadequate for a two-parameter tool with no other structured data.
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 lists two required parameters (image_source, prompt) with no descriptions, and the tool description adds no information about them. The description does not explain what these parameters represent or how to format their values, leaving the agent with no guidance on correct invocation.
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 states the tool is an alias for analyze_image, which references a specific sibling but does not define what the tool actually does. The purpose is implied through the name and the reference, but it is not explicitly stated as an action or resource. This is vague but not a pure tautology, as it provides a pointer to another tool.
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?
No guidance is given on when to use this tool versus alternatives. The description only says it is an alias, which implies interchangeability with analyze_image, but it does not explicitly state usage conditions, exclusions, or why an agent might choose this alias over the original. There is no mention of sibling tools or alternative scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_diff_checkB
Compare EXPECTED (first) vs ACTUAL (second) UI for visual regression.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| actual_image_source | Yes | ||
| expected_image_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It explains the input ordering but gives no indication of the output format, return value, or side effects. The description only restates the comparison purpose without behavioral detail.
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?
A single, front-loaded sentence that efficiently conveys the main purpose. No wasted words, though it's arguably too sparse given the tool's complexity.
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?
With three required parameters and no output schema or annotations, the description omits crucial context: what the prompt is for, what the diff output looks like, and any prerequisites on image formats. It's minimal for an agent to invoke 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 0%, so the description must explain parameters. It clarifies the role of expected_image_source and actual_image_source via 'first/second', but leaves prompt completely unexplained and doesn't specify what 'image_source' accepts (URL, path, etc.).
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: comparing expected vs actual UI for visual regression. It uses a specific verb and resource, and distinguishes itself from sibling image analysis tools by focusing on UI diffing.
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 phrase 'for visual regression' provides clear context for when to use this tool. It doesn't explicitly name alternatives or when-not-to-use, but the purpose is distinctive enough among siblings to imply appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ui_to_artifactB
Convert a UI screenshot into an artifact (code, prompt, spec or description).
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| output_type | Yes | ||
| image_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It merely states the conversion action without indicating any side effects, required permissions, input handling details, or output format expectations. This leaves the agent without insight into tool behavior beyond the basic operation.
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 a single, front-loaded sentence with no wasted words. It efficiently conveys the core purpose without unnecessary elaboration.
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?
With no output schema, no annotations, and minimal parameter definitions, the description is insufficient for reliable tool invocation. It lacks critical information about input formats, parameter semantics, and expected results, making it incomplete for a tool with three required parameters.
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% for all three required parameters, and the description only partially compensates by listing artifact types that map to output_type. It gives no detail about what image_source accepts (e.g., URL, file path) and completely omits the role of 'prompt' in the conversion process.
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 states a specific verb ('Convert') and resource ('UI screenshot') with clear output types ('artifact (code, prompt, spec or description)'). It is distinct from sibling tools like analyze_image or extract_text_from_screenshot, which focus on analysis or extraction rather than conversion.
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 when a UI screenshot needs to be converted to an artifact, but it does not explicitly state when NOT to use it or suggest alternative tools. No exclusions or comparative context are provided, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
understand_technical_diagramC
Understand an architecture/flowchart/UML/ER/system diagram.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| diagram_type | No | ||
| image_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits but only says 'Understand', which is tautological and uninformative. It does not mention processing details, output format, or limitations, as seen in similar diagram 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 a single, concise sentence with no filler, which makes it quick to read. However, it borders on terseness, sacrificing useful detail for brevity, so it does not fully exploit its structure.
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 lack of output schema, annotations, and parameter descriptions, the one-line description is inadequate. It fails to explain the tool's capabilities, expected usage, or how the prompt influences the analysis, leaving an agent without enough context to invoke it reliably.
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 0%, and the description does not elaborate on any parameters. While image_source and prompt are fairly self-explanatory, diagram_type is left undefined, and no guidance is given on how to construct the prompt or which parameter combinations are valid.
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 understands technical diagrams, enumerating specific types (architecture, flowchart, UML, ER, system). This distinguishes it from sibling tools like analyze_data_visualization or generic analyze_image, though the verb 'understand' is somewhat vague regarding what output to expect.
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 intended use is implied by the diagram types, but there is no explicit guidance on when to prefer this tool over siblings like analyze_image or analyze_data_visualization. No exclusions or alternative tool mentions are provided, leaving usage decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
video_analysisD
Alias for analyze_video.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| video_source | Yes |
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 disclosing behavior. 'Alias for analyze_video' discloses nothing about side effects, return values, or limitations; it is not informative at all.
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 short, but it is under-specified rather than concise. The single sentence 'Alias for analyze_video' does not earn its place because it provides no useful information; it is a form of under-specification.
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 2 required parameters, no output schema, and no annotations, so the description should compensate. It does not: the alias statement adds nothing, leaving the tool functionally opaque for the agent.
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 0%, and the description adds no meaning to the parameters 'prompt' and 'video_source'. The agent receives no hints about expected formats, types, or examples beyond the raw 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 is merely 'Alias for analyze_video,' which does not state what the tool does (e.g., video analysis). It only points to another tool, so the agent must infer purpose from the sibling tool or return to the name, providing no standalone clarity.
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?
There is no guidance about when to use this tool versus the sibling 'analyze_video' or alternatives. The description gives no context, conditions, or exclusions, so the agent gets no help deciding between tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Several tools have direct aliases (analyze_image/image_analysis, analyze_video/video_analysis) causing ambiguity. The other image-analysis tools (data visualization, UI diff, error screenshot, diagram understanding) overlap in scope but have distinct purposes, so some differentiation is possible.
Most tools follow a verb_noun pattern (analyze_data_visualization, analyze_image, extract_text_from_screenshot), but several deviate (ui_diff_check, ui_to_artifact, image_analysis, video_analysis). The mixed conventions and presence of aliases make naming inconsistent.
Ten tools is within a reasonable range for a vision server, but two are redundant aliases, effectively reducing the count to eight. The set is not bloated, but the aliases needlessly inflate the number.
The server covers a broad range of vision tasks: general image/video analysis, chart understanding, UI regression, OCR, error diagnosis, diagram comprehension, and UI conversion. Missing some common vision features like object detection or face analysis, but for its UI/development focus, the coverage is solid.
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
MCP server for building and testing AI agents with multi-model experimentation and insights.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceA drop-in MCP server that pairs long-context reasoning LLMs with vision models in description-only mode, enabling any reasoning model to 'see' images without the vision model giving advice or solutions.1MIT
- FlicenseNot gradedqualityBmaintenanceA versatile MCP server that adds vision capabilities (image analysis, OCR, image/video generation) to AI models lacking native vision, with support for multiple providers and automatic task routing.1
- AlicenseNot gradedqualityCmaintenanceA Model Context Protocol server that provides multimodal vision tools such as image description, OCR, visual Q&A, and object detection, powered by any vision model via OpenRouter.MIT
- FlicenseAqualityCmaintenanceAn MCP server that adds visual understanding to text-only LLMs via image understanding, OCR, and image comparison tools, with multi-provider fallback and context-aware Focus Hint for precise descriptions.3
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/black-94/lm-visual-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server