lense-visual-control.netlify.app
Observe your screen, send an action, and check the result. Lense gives people and WebMCP agents a shared workspace for visual desktop control.
First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com
Answer 3 · Act 4 · Transact 0 · Score: Not yet scored
Tool inspector
desktop_action
Perform one mouse, keyboard, scroll or focus action. Observe before and after. For queued, continuous or until-complete tasks include expectedTaskId and observationId from a fresh desktop_observe. Stale task/frame reports are rejected. The selected window is focused before keyboard, click, drag or scroll input. Choose a window target for keyboard input. Coordinates refer to the full native target. Set observeAfter:true to get a fresh result image in this same call, with optional settleMs 0..2000, default 100. If observationError is returned, input already succeeded; capture again without repeating the action.
Page: /
Input schema
No input properties (empty object).
Raw JSON schema
{
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"const": "pointer.move"
},
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"target": {
"type": "object",
"properties": {
"type": {
"enum": [
"monitor",
"window"
]
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"type",
"id"
],
"additionalProperties": false
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"x",
"y"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "pointer.click"
},
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"button": {
"enum": [
"left",
"right",
"middle"
]
},
"target": {
"type": "object",
"properties": {
"type": {
"enum": [
"monitor",
"window"
]
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"type",
"id"
],
"additionalProperties": false
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"x",
"y"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "pointer.doubleClick"
},
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"button": {
"enum": [
"left",
"right",
"middle"
]
},
"target": {
"type": "object",
"properties": {
"type": {
"enum": [
"monitor",
"window"
]
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"type",
"id"
],
"additionalProperties": false
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"x",
"y"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "pointer.drag"
},
"from": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"to": {
"type": "object",
"properties": {
"x": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"y": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"x",
"y"
],
"additionalProperties": false
},
"durationMs": {
"type": "integer",
"minimum": 50,
"maximum": 5000
},
"target": {
"type": "object",
"properties": {
"type": {
"enum": [
"monitor",
"window"
]
},
"id": {
"type": "string",
"minLength": 1,
"maxLength": 128
}
},
"required": [
"type",
"id"
],
"additionalProperties": false
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"from",
"to",
"durationMs"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "keyboard.type"
},
"text": {
"type": "string",
"minLength": 1,
"maxLength": 10000
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"text"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "keyboard.key"
},
"key": {
"type": "string",
"minLength": 1,
"maxLength": 32
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"key"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "keyboard.hotkey"
},
"keys": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
},
"minItems": 1,
"maxItems": 5
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"keys"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "scroll"
},
"deltaX": {
"type": "integer",
"minimum": -10000,
"maximum": 10000
},
"deltaY": {
"type": "integer",
"minimum": -10000,
"maximum": 10000
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"deltaX",
"deltaY"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"const": "window.focus"
},
"windowId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"expectedTaskId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observationId": {
"type": "string",
"minLength": 1,
"maxLength": 128
},
"observeAfter": {
"type": "boolean"
},
"settleMs": {
"type": "integer",
"minimum": 0,
"maximum": 2000
}
},
"required": [
"type",
"windowId"
],
"additionalProperties": false
}
]
}
Similar websites
reloadium.com
Paste a topic, URL, or PDF/TXT/MD — get a multi-episode AI podcast with audio, transcripts, timelines and quizzes. 60+ languages.
api.lmm.best
Connect AI models, tools and applications with LMM Forge. Explore model access, developer guides and open-source collaboration.
deskintab.dgkhan08.workers.dev
An operating system in your browser, where you and your AI agent share apps, files, and projects through WebMCP.
webmcp.agentsdesk.dev
Meridian Ops