select_surface
ActiveTool of cloud.redu/mcp
For a repo with SEVERAL runnable parts, call this BEFORE plan_deploy. You enumerate the candidate surfaces (find every Dockerfile/Containerfile, OPEN each, classify by its EXPOSE + CMD — never by directory name) and pass them in; redu RANKS them with fixed rules (a standalone browser desktop/noVNC > a self-contained web app > a keys-required playground > an API > a headless worker > docs/examples). GUIDED: returns the ranked list to present to the user, who picks. YOLO: auto-selects the TOP-ranked surface. Then run plan_deploy on the chosen surface's path + http_port. (A single-surface repo doesn't need this.)
Parameters schema
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"surfaces"
],
"properties": {
"mode": {
"enum": [
"guided",
"yolo"
],
"type": "string",
"description": "Drive mode; omit to use the session's sticky mode."
},
"surfaces": {
"type": "array",
"items": {
"type": "object",
"required": [
"path",
"kind"
],
"properties": {
"kind": {
"enum": [
"browser-desktop",
"web-app",
"static-site",
"api",
"headless-worker",
"docs",
"example",
"library",
"unknown"
],
"type": "string",
"description": "What this surface IS, judged by OPENING its Dockerfile (EXPOSE + CMD/start script) — NOT by the directory name. 'browser-desktop' = a GUI/desktop streamed over noVNC/VNC/KasmVNC/Xvfb (a dir named xfce/kasm/sandbox whose Dockerfile runs noVNC IS this). 'web-app' = a browser app/UI a user uses. 'static-site' = static/marketing. 'api' = backend, no UI. 'headless-worker' = no HTTP UI. 'docs' = documentation. 'example'/'library' = not the product."
},
"path": {
"type": "string",
"description": "Directory of this surface, e.g. 'libs/xfce' or '.' for the repo root."
},
"exposes": {
"type": "array",
"items": {
"type": "integer"
},
"description": "All ports the Dockerfile EXPOSEs (e.g. [5901,6901]) — pass them so the deploy publishes http_port, not the lowest."
},
"summary": {
"type": "string",
"description": "One line: what a user does at this surface."
},
"http_port": {
"type": "integer",
"maximum": 65535,
"minimum": 1,
"description": "The port a user opens in the browser for this surface (the web/noVNC port, e.g. 6901 for an xfce noVNC desktop — NOT a raw VNC/debug port)."
},
"needs_external_keys": {
"type": "boolean",
"default": false,
"description": "TRUE if this surface is INERT until the VISITOR supplies their own API key or an external backend/sandbox (e.g. an agent 'playground' that needs an LLM key + a cloud sandbox). Such a surface is heavily demoted vs one that works standalone."
}
},
"additionalProperties": false
},
"minItems": 1,
"description": "EVERY runnable surface you found (run `find . -name Dockerfile -o -name Containerfile`, open each). Be exhaustive — a missed browser-desktop subdir is the #1 cause of a wrong pick."
}
},
"additionalProperties": false
}No endpoints wrapped at confidence ≥ 0.50.
Parent server
cloud.redu/mcp
1/7 registries