Skip to main content
Glama

πŸ’» mcp-vnc

Node.js Version License: MIT npm version

A Model Context Protocol (MCP) server that enables AI agents to remotely control Windows, Linux, macOS or anything else that can run a VNC server (don't worry, it's probably fine).

Screenshot

πŸš€ Quick Start

Install from NPM

npm install -g @hrrrsn/mcp-vnc

Install from Source

git clone https://github.com/hrrrsn/mcp-vnc
cd mcp-vnc
npm install
npm run build

Related MCP server: windows-computer-use-mcp

βš™οΈ Configuration

Claude Desktop

  1. Locate and open your Claude Desktop configuration file:

    • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

    • Windows: %APPDATA%\Claude\claude_desktop_config.json

    • Linux: ~/.config/Claude/claude_desktop_config.json

  2. Add the following configuration:

Using NPM Install:

{
  "mcpServers": {
    "vnc-controller": {
      "type": "stdio",
      "command": "mcp-vnc",
      "env": {
        "VNC_HOST": "192.168.1.100",
        "VNC_PORT": "5900",
        "VNC_PASSWORD": "your-vnc-password"
      }
    }
  }
}

Built from Source:

{
  "mcpServers": {
    "vnc-controller": {
      "type": "stdio",
      "command": "node",
      "args": ["dist/index.js"],
      "cwd": "/path/to/mcp-vnc",
      "env": {
        "VNC_HOST": "192.168.1.100",
        "VNC_PORT": "5900",
        "VNC_PASSWORD": "your-vnc-password"
      }
    }
  }
}

VS Code

Please refer to the VS Code documentation

πŸ› οΈ Available Tools

The MCP server provides the following tools for remote desktop control:

πŸ–±οΈ Mouse Control

Parameter

Required

Type

Description

Default

x

βœ…

number

X coordinate

-

y

βœ…

number

Y coordinate

-

button

❌

string

Mouse button (left, right, middle)

left

double

❌

boolean

Double-click instead of single click

false

Example: vnc_click(x=100, y=200, button="right", double=true)

Parameter

Required

Type

Description

x

βœ…

number

X coordinate

y

βœ…

number

Y coordinate

Example: vnc_move_mouse(x=500, y=300)

⌨️ Keyboard Control

Parameter

Required

Type

Description

key

βœ…

string

Key or key combination to press

Supported Keys:

  • Single keys: a, Enter, F1, Escape, Up, Down, Tab, Space

  • Key combinations: Ctrl+c, Alt+F4, Ctrl+Alt+Delete, Shift+Tab

  • Modifiers: Ctrl, Alt, Shift, Super/Win, Meta/Cmd

Examples:

  • vnc_key_press(key="Enter")

  • vnc_key_press(key="Ctrl+Alt+Delete")

πŸ“ Text Input

Parameter

Required

Type

Description

Default

text

βœ…

string

Text to type

-

enter

❌

boolean

Press Enter after typing

false

Example: vnc_type_text(text="Hello World!", enter=true)

Parameter

Required

Type

Description

lines

βœ…

string[]

Array of lines to type

Example: vnc_type_multiline(lines=["Line 1", "Line 2", "Line 3"])

πŸ“Έ Screen Capture

Parameter

Required

Type

Description

Default

delay

❌

number

Delay before screenshot (0-300000ms)

0

Example: vnc_screenshot(delay=1000) - Wait 1 second before capture

🀝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

Available Tools

6 tools
vnc_clickB

Click at specified coordinates

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate
buttonNoMouse buttonleft
doubleNoDouble-click instead of single click

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure. It only says 'Click at specified coordinates' and does not reveal whether the pointer is moved to the coordinates first, what coordinate system is used, whether there are side effects, or what happens on failure. This is a minimal mutation-like action with no safety profile or behavioral nuance disclosed.

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 sentence with no filler words, making it maximally concise and front-loaded. Every component of the description earns its place by stating the essential 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?

Despite full schema coverage, the tool has no annotations and no output schema. The description does not explain the actual behavioral effectβ€”whether the click happens at the current cursor position or after moving to (x, y)β€”nor the coordinate system, which is essential for an agent to invoke the tool correctly. For a remote-desktop clicking tool, this is a meaningful gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all four parameters. The description adds no extra meaning beyond the schema, but the parameter names are self-explanatory and 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('Click') and resource ('specified coordinates'), making the tool's purpose immediately obvious. It also naturally differentiates from sibling tools like vnc_move_mouse, vnc_key_press, and vnc_screenshot because 'click' is distinct and unambiguous.

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 about when to use this tool versus its siblings or when not to use it. The description does not mention prerequisites, context, or alternative routing, so the agent must infer usage purely from the tool name and generic action.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vnc_key_pressC

Press a key or key combination

ParametersJSON Schema
NameRequiredDescriptionDefault
keyYesKey to press. Single keys: "a", "Enter", "F1". Combinations: "Ctrl+c", "Alt+F4", "Ctrl+Alt+Delete", "Shift+Tab"

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full burden of behavioral disclosure, but it only restates the action. It does not explain whether key press/release is simulated, how modifiers are handled, whether focus is required, or what observable effect the key press has.

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?

'Press a key or key combination' is a single sentence with no filler and front-loads the action. It is concise, though it is arguably too sparse to fully carry the tool's behavioral and usage context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool, the schema richly documents the key syntax and examples, and no output schema is required. However, the description omits any behavioral context and does not differentiate when to use this tool over sibling input tools, so it is only minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents the only parameter with concrete examples. The description adds no meaning beyond the schema, so the baseline score of 3 applies.

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 names a concrete action ('Press') and a scoped resource ('a key or key combination'), making the tool's basic purpose clear. It is naturally distinguishable from siblings like vnc_click and vnc_type_text, though it does not explicitly name that distinction.

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 like vnc_type_text or vnc_click. The schema examples imply intended syntax, but the description itself offers no context, prerequisites, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vnc_move_mouseB

Move mouse to specified coordinates

ParametersJSON Schema
NameRequiredDescriptionDefault
xYesX coordinate
yYesY coordinate

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 full responsibility for behavioral disclosure. It only restates the basic action and provides no additional context about coordinate origin, absolute vs relative movement, bounds behavior, or whether a VNC session must be active.

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, focused sentence with no wasted words. It is appropriately front-loaded and easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mouse move, the description is minimally viable, but it omits important context such as the coordinate system, units, or screen origin. Since there is no output schema and no annotations, a bit more context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with x and y both described as coordinates. The description adds no meaning beyond 'specified coordinates', so it neither improves nor detracts from the schema's already-complete parameter documentation.

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 clear verb ('Move') and resource ('mouse') with a specific target ('specified coordinates'). It is immediately distinguishable from sibling tools like vnc_click, vnc_key_press, and vnc_screenshot, which perform different actions.

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?

The description gives no guidance on when to use this tool versus siblings, such as 'use before vnc_click' or 'use to reposition without clicking'. Context for when this is the appropriate choice is absent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vnc_screenshotA

Take a screenshot of the current screen

ParametersJSON Schema
NameRequiredDescriptionDefault
delayNoDelay in milliseconds before taking screenshot (useful for waiting for processes to complete)

TDQS

A3.7/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 only says a screenshot is taken and does not state what the output looks like, where the screenshot is returned or saved, whether a live VNC session is required, or any side effects.

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 one front-loaded sentence with no filler or repetition. It communicates the core action immediately and does not waste the agent's attention.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one optional, fully documented parameter, this is minimally viable. However, there is no output schema and no statement of the return format, so an agent cannot be certain whether the tool returns an image, a file path, or base64 data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single delay parameter is fully documented in the input schema, including units, range, default, and a practical use case. The description itself adds no parameter detail, but with 100% schema coverage, the schema does the heavy lifting and the baseline score of 3 applies.

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 clear verb and resource: taking a screenshot of the current screen. It is immediately distinguishable from the sibling VNC input tools, which handle clicks, mouse movement, and key/text entry.

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 tool's purpose is self-evident as the only capture tool among sibling actions, and the delay parameter in the schema adds a clear use case for waiting on processes. There are no explicit exclusions or alternative routing instructions, but none are really needed for this simple, unique-purpose tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vnc_type_multilineA

Type multiple lines of text, separated by newlines

ParametersJSON Schema
NameRequiredDescriptionDefault
linesYesArray of lines to type

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the behavioral transparency burden. It does state the core behavior ('type multiple lines of text, separated by newlines'), but it does not disclose details such as whether each line is terminated with Enter, whether trailing newlines are sent, or how the input is delivered. The behavior is sufficiently clear for a simple typing tool but not deeply transparent.

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 filler. Every word adds meaning: it specifies the action, the target, and the line-separator behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with one required parameter, full schema coverage, and no output schema, the description provides enough context to call the tool correctly. It could mention usage tradeoffs with vnc_type_text, but the low complexity and clear parameter semantics make the current description largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single parameter as an array of lines with 100% coverage. The description adds useful meaning by explaining that lines are separated by newlines when typed, which is not explicit in the schema. This goes beyond the baseline schema coverage.

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 uses a specific verb and resource: it types multiple lines of text separated by newlines. This clearly distinguishes it from sibling tools like vnc_type_text, vnc_click, and vnc_key_press by describing its unique input behavior.

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 when to use the toolβ€”when multiple lines of text need to be typedβ€”but it does not explicitly name alternatives or state when not to use it. No explicit guidance is given about choosing vnc_type_text for single-line input, leaving selection partly to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vnc_type_textC

Type text string

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesSingle line of text to type
enterNoPress Enter after typing text

TDQS

C2.8/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 only restates the tool name-level behavior and does not explain how typing is performed, where input lands, whether it is single-line, or whether Enter is pressed. The schema covers the enter option, but the description itself adds no behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and free of filler, but its brevity is not particularly informative. It is closer to under-specification than to purposeful, well-structured content, since it adds little beyond the tool name.

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 annotations and no output schema, the description needed to provide more orientation. It does not explain this tool's role among siblings, especially vnc_type_multiline, and does not clarify practical details such as whether text is typed into the focused VNC window. The schema covers parameters, but the overall context is incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'text' and 'enter' are already described meaningfully. The description adds no meaning beyond the schema, but the baseline of 3 is appropriate because the schema carries the semantic weight.

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 states a clear action ('Type') and a clear object ('text string'), so an agent can tell this tool sends text input. However, it does not explicitly distinguish this tool from its sibling vnc_type_multiline or mention the VNC context, so it stops short of full differentiation.

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 vnc_key_press, vnc_type_multiline, or vnc_screenshot. It also does not mention that text goes to the currently focused field, nor when the enter option should be enabled.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv1.0.2
    • First observedvnc_click
    • First observedvnc_key_press
    • First observedvnc_move_mouse
    • First observedvnc_screenshot
    • First observedvnc_type_multiline
    • First observedvnc_type_text

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct VNC action: clicking, key pressing, mouse moving, screenshotting, and text typing (single and multiline). There is no ambiguity between the two text typing tools as they are differentiated by line count.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with the 'vnc_' prefix (e.g., vnc_click, vnc_key_press, vnc_type_text). The naming is uniform and predictable, aiding agent selection.

Tool Count5/5

With 6 tools, the server is well-scoped for basic VNC remote control operations. Each tool serves a clear purpose without being excessive, fitting neatly within the ideal 3-15 range.

Completeness4/5

The tool set covers essential GUI interactions (click, type, move, screenshot) but lacks common operations like scrolling or right-click. This is a minor gap that may require workarounds for some tasks.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A standalone MCP server for Windows desktop control, enabling screenshots, mouse and keyboard input, app launch, window/display management, and clipboard access via natural language.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    An MCP server that gives AI agents human-like control over Windows via visual perception and simulated mouse and keyboard input, enabling automation of any application without APIs.
    36 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A local, dependency-free MCP server that gives AI agents controlled access to the active Windows desktop, enabling automated interaction with applications through screenshots, clicks, typing, and window management.
    106 npm
    MIT