Cloud Services
glasswarp.com
Manage remote Windows machines for running showcase demos and sessions.
ENDPOINT 1
https://mcp.glasswarp.com/mcp
MCP server metadata
- Name
- glasswarp
- Version
- 0.1.0
Glasswarp gives you eyes and hands on a real Windows PC that its owner paired to this account. Glasswarp supplies vision and input; you make every decision. Attribute actions to yourself, not to Glasswarp. ## Before anything: a usable rig Call `rigs.list`. You need a rig with status USABLE (online, API access enabled by the owner). If none exists, direct the user to install the host agent (https://www.glasswarp.com/downloads) and pair it in Console -> Rigs, then enable API access. This is a physical owner-consent step: never attempt to work around it, and never ask for machine passwords or credentials. ## Choose a path (capability + consent) ### Short tasks and human-in-the-loop — always direct MCP Glances, one or a few clicks, typing a string, "what's on my screen?", open an app and do one thing: use MCP tools in this chat. `session.start` -> `screen.observe` -> act -> `session.end`. Never scaffold code for a short task — "click OK" must never generate a file. ### Longer tasks — offer, don't impose Multi-step work, games, workflows, "solve / clear / finish X": 1. Optionally `demos.list` — if a showcase matches, show its run contract from `demos.get` (install + command). 2. Then branch on what THIS client can do and what the USER wants: **Code-capable client** (can write files and run a terminal): - Offer to write a small SDK agent that loops screen.observe -> decide -> act outside chat (or the matching showcase command). Explain the tradeoff plainly: chat-driven play is one model turn per action — slow and minute-hungry; a scaffolded agent runs the loop at full speed. - Do not impose it. If the user prefers chat or says "just do it here," proceed with direct MCP tools. - If they accept: scaffolded agents must follow SKILL.md (https://www.glasswarp.com/SKILL.md) — `session.end` in a `finally` block, bounded loops, observe-verify between actions, and re-observe + re-resolve targets (never hardcode target ids). Use MCP only for preflight, Live View, and recovery ("it crashed — look at the screen"). **Chat-only client** (no reliable shell or file write): - Proceed with direct MCP tools for the task. - Briefly note once that a faster path exists via the Python SDK or `glasswarp-demo` (https://docs.glasswarp.com/guides/ways-to-run-agents) if they later use a code-capable environment — then keep helping here. These path names (Assist / Showcase / Scaffold) are internal vocabulary — never say them to the user; just describe what you will do. ## Showcase tools - `demos.list` / `demos.get` return run contracts only; they do not execute solvers. - Resources: `glasswarp://demos`, `glasswarp://demos/{id}` ## Working hygiene - Prefer `input.send_actions` for any predictable multi-step sequence (click field → type → tab → shortcut). Solo `input.click_target` / `input.type_text` / `input.send_keys` are for one-off acts; chaining them costs a chat turn each. - Plan ahead when the next steps are predictable. After an `screen.observe`, if you can confidently predict the next 3–6 actions (menu paths, dialog fields, keyboard shortcuts, typing into a field you just clicked), send them as one batch via `input.send_actions` (observe_after defaults true; verification is text+targets unless you set `observe_image=true`) — then continue from that result, not after every individual action. Single-step when the screen may change unpredictably: page loads, network waits, installers, anything that can pop a modal. If the verifying observe shows something unexpected, re-plan from there. - Observe after every meaningful step (after a batch or after an unpredictable single action), not blindly after every click. `screen.observe` defaults to text + targets only — set `image=true` only when you must read or judge the screen visually. If `screen.observe` reports no change since your last frame (`changed: false`), do not re-analyze — the server omits any JPEG even if `image=true`. Re-check or wait instead. If dirty data is missing (`dirty` is null / unavailable — e.g. GDI fallback), treat that as **assume changed** and keep verifying; do not skip the model call. - On a Chromium or Electron surface (Chrome, Edge, VS Code, Slack, Discord, any Electron app), the UIA tree builds lazily. If the first observe returns fewer than ~30 targets with no named content controls, wait 2-3 seconds and observe again before concluding the screen is unreadable. - Verification-grade JPEGs: `max_width=960`, quality ~60 (MCP defaults when `image=true` / `observe_image=true`). - Prefer `input.click_target` (numbered targets from the latest observe) over `input.click_xy`. `input.click_xy` uses NATIVE screen coordinates as reported by observe — not the downscaled JPEG size. - Target ids are valid for the observe that produced them. Do not persist them across sessions, and re-observe before acting on a screen whose contents may have changed (lists, file browsers, tables). - Always `session.end` when done or when abandoning a task. Billing is wall-clock from session start to end; idle sessions auto-end after ~15 minutes. - If `session.start` fails on a concurrency limit, tell the user which session holds the slot and that it will auto-end when idle (or can be ended in the Console). - `session.live_view` is for the rig owner (Console login). Offer it when starting long or sensitive tasks so they can watch and intervene. Guide: https://docs.glasswarp.com/guides/ways-to-run-agents
Known tools 16
rigs.listList Windows machines (rigs) paired to this API key: id, name, online, api_access_enabled, and USABLE flag.
Inferred read-onlyscreen.observeRead the current screen: UIA targets (numbered ids + native coords) and a text summary.
Inferred read-onlyinput.click_targetLeft/right/middle-click a UIA target by id from the latest screen.
Inferred read-onlyinput.click_xyClick at native screen coordinates (0…native_width-1, 0…native_height-1 from screen.
Inferred read-onlyinput.type_textType a Unicode string into the currently focused control via native input.
Inferred read-onlyinput.scrollMove the cursor to native (x,y) then apply a vertical mouse-wheel delta.
Inferred read-onlyinput.send_actionsPREFERRED multi-step tool: run 1–10 predictable UI actions in one call (input.
Inferred read-onlyapp.launchLaunch an executable on the remote Windows rig (name on PATH or absolute path), optional args.
Inferred read-onlysession.live_viewReturn the console Live View URL (≈60fps) for the rig owner to watch and intervene.
Inferred read-onlysession.statusFetch session metadata: status, host, mode, created_at, action_count, billed_minutes.
Inferred read-onlyCONNECT WITH APPROVAL
Client installation
Review this server and its permissions before adding it. Secret placeholders must be set locally.
Codex
~/.codex/config.toml
[mcp_servers.glasswarp]
url = "https://mcp.glasswarp.com/mcp"
enabled = true
Claude Code
.mcp.json
{
"mcpServers": {
"glasswarp": {
"type": "http",
"url": "https://mcp.glasswarp.com/mcp"
}
}
}
Claude Desktop
Settings → Connectors → Add custom connector
Name: glasswarp
Remote MCP URL: https://mcp.glasswarp.com/mcp
Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.
Cursor
.cursor/mcp.json
{
"mcpServers": {
"glasswarp": {
"url": "https://mcp.glasswarp.com/mcp"
}
}
}
Visual Studio Code
.vscode/mcp.json
Add to Visual Studio Code{
"servers": {
"glasswarp": {
"type": "http",
"url": "https://mcp.glasswarp.com/mcp"
}
}
}
Generic MCP
Client-specific MCP configuration
{
"name": "glasswarp",
"transport": "streamable-http",
"url": "https://mcp.glasswarp.com/mcp"
}
MCP Inspector
Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.
TRUST AND VERIFICATION EVIDENCE
Loading Trust v2 evidence…
Checking the associated registrable domain. The BuiltWith key remains server-side.
Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.