Skip to main content
Glama

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
TZNoIANA timezone (POSIX standard, e.g. 'Europe/Paris').America/New_York
LANGNoPOSIX locale (e.g. 'fr_FR.UTF-8').en_US.UTF-8
GHOSTDESK_PORTNoMCP server listening port.3000
GHOSTDESK_TLS_KEYNoPath to the TLS private key (matching GHOSTDESK_TLS_CERT)./etc/ghostdesk/tls/server.key
GHOSTDESK_TLS_CERTNoPath to the TLS certificate. When the file exists, 'websockify' and the MCP server auto-switch to 'wss://' / 'https://'./etc/ghostdesk/tls/server.crt
GHOSTDESK_AUTH_TOKENNoBearer token required on every MCP request. Generate with 'openssl rand -hex 32'.
GHOSTDESK_SCREEN_WIDTHNoVirtual screen width in pixels.1280
GHOSTDESK_VNC_PASSWORDNoPassword for wayvnc (username is 'agent' in the prod image). Generate with 'openssl rand -hex 16'.
GHOSTDESK_SCREEN_HEIGHTNoVirtual screen height in pixels.1024

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
screen_shotA

Capture the screen, optionally cropped to a region.

Args: region: Area to capture (full screen if omitted). format: "webp" (default, smaller payload) or "png" (lossless). stabilize: Wait for the page to stop moving before capturing (max 2.5 s). Useful right after navigation.

mouse_clickA

Click at screen coordinates. Use coordinates from screen_shot() or inspect().

Returns a dict with:

  • action: description of what was performed.

  • screen_changed: whether the 200x200 px zone around the click visibly changed within 2 s. If false the click likely missed its target — retry with adjusted coordinates or take a new screen_shot().

  • reaction_time_ms: how quickly the change was detected (ms).

mouse_double_clickA

Double-click at screen coordinates. Use for opening files or selecting words.

Returns a dict with:

  • action: description of what was performed.

  • screen_changed: whether the 200x200 px zone around the click visibly changed within 2 s. If false the click likely missed its target.

  • reaction_time_ms: how quickly the change was detected (ms).

mouse_dragA

Drag from one position to another. Use for selecting text, moving items, or resizing.

Returns a dict with:

  • action: description of what was performed.

  • screen_changed: whether the 200x200 px zone around the drop point visibly changed within 2 s.

  • reaction_time_ms: how quickly the change was detected (ms).

mouse_scrollA

Scroll at a position. direction: up/down/left/right. amount: number of scroll steps (max 5).

Returns a dict with:

  • action: description of what was performed.

  • screen_changed: whether the 200x200 px zone around the scroll point visibly changed within 2 s. If false the page may already be at the scroll boundary.

  • reaction_time_ms: how quickly the change was detected (ms).

key_typeA

Type text. Handles Unicode, newlines, and tabs.

Returns the standard {action, screen_changed, reaction_time_ms} feedback. If screen_changed is false, the text field probably didn't have focus — click on it first and retry.

key_pressA

Press a key or key combination.

Friendly names accepted: Tab, Return, Escape, BackSpace, Left, Page_Up, F4, Ctrl, Alt, Shift, Super. Single printable characters stay as-is (a, c, 5).

Examples: Tab, Ctrl+c, Alt+F4, Ctrl+Shift+Tab.

Returns the standard {action, screen_changed, reaction_time_ms} feedback.

app_listA

Return installed GUI apps.

Scans .desktop entries in /usr/share/applications/. Call this before choosing which app to use for a task, or after installing new software during the session.

Returns a list of dicts, each with:

  • name: human-readable application name.

  • exec: the executable to pass to app_launch().

app_launchA

Launch a desktop GUI application and return its PID and log file path.

Only applications listed by app_list() are accepted. The process runs in the background; its stdout and stderr are captured in a log file under /tmp/ghostdesk/proc-<pid>.log. Use app_status(pid) to check whether it is still running and to read its output.

Returns a dict with:

  • pid: the process ID of the launched application.

  • log_file: path to the file capturing stdout and stderr.

  • action: description of what was launched.

On failure, returns a dict with a single error key describing what went wrong (not a GUI app, invalid syntax, command not found).

app_statusA

Check whether a launched app is still running and read its logs.

Only PIDs returned by app_launch() in this session are accepted.

Args: pid: Process ID returned by app_launch(). lines: Number of trailing log lines to return (default 50).

Returns a dict with:

  • pid: the process ID.

  • running: whether the process is still alive.

  • log_file: path to the log file.

  • tail: the last lines lines of stdout/stderr output.

On failure, returns a dict with a single error key.

clipboard_getA

Read the current clipboard text.

clipboard_setA

Write text to the clipboard. Use with key_press("ctrl+v") to paste.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

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/YV17labs/GhostDesk'

If you have feedback or need assistance with the MCP directory API, please join our Discord server