Skip to main content
Glama

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

mcp

Thin stdio MCP entry. Every tool call is forwarded to the shared server — no embedded vision service, so rate limiting is always centralized.

server

The shared singleton process: POST /vision/analyze + the hook proxy (/proxy/<proto>/<base64url>...). Which hooks are active is pure configuration (hooks.image.enabled, hooks.classifier.enabled).

providers

Provider implementations behind a type registry with per-provider rate limiting (rpm / concurrency). Each provider implements one or both behavior groups: IMAGE (probe_image / analyze_image) and CLASSIFIER (rewrite_classifier_request / rewrite_classifier_response).

vision

Image-recognition orchestration: concurrency gate + the provider router that walks the configured image_chain. Prompts and the two behavior groups' shared types live here/next to providers.

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.

  • codexcodex exec with --output-schema, read-only sandbox. IMAGE only.

  • gemini — google-genai API (api_key_env: GEMINI_API_KEY). IMAGE + classifier (honors disable_thinking).

  • opencode — direct OpenAI-compatible API; mode: go (default, https://opencode.ai/zen/go/v1) or mode: zen, base_url overrides mode. IMAGE + classifier; no local CLI required.

  • volcengine — Volcano Ark; mode: agent (Anthropic Messages /v1/messages over api/plan), mode: coding (api/coding), or mode: api (OpenAI chat-completions api/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 applies

Quick 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 providers

Copy 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 here

Local 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 tools
analyze_data_visualizationB

Analyze a chart/plot (trends, anomalies, comparisons, distribution).

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
image_sourceYes
analysis_focusNo

TDQS

B3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
image_sourceYes

TDQS

C2/5.0
Behavior1/5

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.

Conciseness4/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
video_sourceYes

TDQS

D1.8/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
contextNo
image_sourceYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
image_sourceYes
programming_languageNo

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
image_sourceYes

TDQS

D1.8/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose3/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
actual_image_sourceYes
expected_image_sourceYes

TDQS

B3.4/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
output_typeYes
image_sourceYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
diagram_typeNo
image_sourceYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
video_sourceYes

TDQS

D1.5/5.0
Behavior1/5

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.

Conciseness2/5

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.

Completeness1/5

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.

Parameters1/5

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.

Purpose2/5

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.

Usage Guidelines2/5

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

C2.4/5.0
Disambiguation2/5

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.

Naming Consistency2/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessSyncing

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

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A 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.
    1
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    An 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

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