opencode-workbench

Provision an OpenCode workbench and MCP stack on any Linux box, local or over SSH.

Sollte ich dies verwenden

Qualität und Sicherheit

A
Qualität der Beschreibung
100%
Vollständigkeit des Schemas
93%
Qualität der Benennung
92%
Risiko der Vergiftung
100%
Übereinstimmung der Berechtigungen
100%
Einhaltung des Protokolls
100%

Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.

Kontextkosten

~7,343Tokens (Tool-Definitionen)
~7.5 KBTypische Antwortgröße
Erhebliche Auswirkung auf die Aufmerksamkeit (5.74% von 128k Kontext)

Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.

Installieren

Installation mit einem Klick

Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:

{
  "mcpServers": {
    "opencode-workbench": {
      "command": "npx",
      "args": [
        "@simonmak-ascent/opencode-workbench"
      ]
    }
  }
}

Ausführbare Pakete

npm@simonmak-ascent/opencode-workbench4.0.1stdio

Remote-Endpunkte

https://opencode-workbench.simonmak.com/mcpstreamable-http

Was es kann

Tool-Inventar

Tools (10)

🟢 Nur lesen🟡 Schreiben🔴 Löschen⚪ Unbekannt
🟢describe_workbench

Describe this MCP server from its bundled profile without contacting any target or making a network call: repository URL, the default component set, components grouped by tier (required/core/optional), and optional MCP add-ons. It takes no parameters, is always safe, and returns instantly. Use it first to resolve a component id for install_component/remove_component/update_component or to see available add-ons; use inspect_target for a machine's live state.

Eingabe-Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "repo": {
      "type": "string",
      "description": "Web URL of the workbench repository."
    },
    "repoGit": {
      "type": "string",
      "description": "Git clone URL of the workbench repository."
    },
    "packageRoot": {
      "type": "string",
      "description": "Filesystem path of the installed package."
    },
    "defaultComponents": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Component ids installed by default."
    },
    "optionalMcp": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional MCP add-on ids available in the profile."
    },
    "components": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Component identifier — pass this to install_component."
          },
          "title": {
            "type": "string",
            "description": "Human-readable component name."
          },
          "tier": {
            "type": "string",
            "enum": [
              "required",
              "core",
              "optional"
            ],
            "description": "Component tier."
          },
          "description": {
            "type": "string",
            "description": "What the component provides."
          },
          "manual": {
            "type": "boolean",
            "description": "True when the step cannot be fully automated."
          }
        },
        "required": [
          "id",
          "title",
          "tier",
          "description",
          "manual"
        ],
        "additionalProperties": false
      },
      "description": "Every component with id, tier and description."
    }
  },
  "required": [
    "repo",
    "repoGit",
    "packageRoot",
    "defaultComponents",
    "optionalMcp",
    "components"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢inspect_target(target)

Probe one Linux machine — this host (`local`) or a remote host over SSH (`ssh`) — and report its OS, kernel, architecture, package manager, Node/npm, OpenCode, Docker, and per-tool detection flags, plus the names (never values) of credentials present. Read-only: it runs one shell probe as the target user (over SSH when `mode:ssh`), installs nothing, writes nothing, contacts no external service, and can take a few seconds per hop. Parameter semantics: `target.mode` selects local vs ssh (default `local`); `target.host` is required only for ssh; `target.user` defaults to the ssh config/current user; `target.cwd` sets the directory for relative checks; `target.port`/`identityFile` pass straight to ssh. Use it to see what a clone would touch, then plan_clone to turn that into an ordered plan and apply_clone to perform it.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    }
  },
  "required": [
    "target"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "user": {
      "type": "string",
      "description": "Detected user on the target."
    },
    "home": {
      "type": "string",
      "description": "Home directory on the target."
    },
    "workspaceDefault": {
      "type": "string",
      "description": "Default directory where the profile repo will be cloned."
    },
    "configDir": {
      "type": "string",
      "description": "OpenCode config directory on the target."
    },
    "osId": {
      "description": "OS identifier (e.g. ubuntu, debian, rhel).",
      "type": "string"
    },
    "osName": {
      "description": "Human-readable OS name.",
      "type": "string"
    },
    "osVersion": {
      "description": "OS version string.",
      "type": "string"
    },
    "kernel": {
      "description": "Kernel name and release.",
      "type": "string"
    },
    "arch": {
      "description": "CPU architecture (e.g. x86_64, aarch64).",
      "type": "string"
    },
    "packageManager": {
      "description": "Detected package manager (apt-get, dnf, yum, apk, pacman, zypper, or none).",
      "type": "string"
    },
    "nodeVersion": {
      "description": "Installed Node.js version, if any.",
      "type": "string"
    },
    "npmModules": {
      "description": "npm global modules directory.",
      "type": "string"
    },
    "opencodeBin": {
      "description": "Path to the opencode binary, if installed.",
      "type": "string"
    },
    "dockerRunning": {
      "description": "Whether the Docker daemon is reachable.",
      "type": "boolean"
    },
    "envPresent": {
      "description": "Space-separated names of credentials present on the target (values are never read).",
      "type": "string"
    },
    "has": {
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {
        "type": "boolean"
      },
      "description": "Detection flags for git, curl, node, npm, corepack, pnpm, docker, uv, gh, opencode, sudo."
    }
  },
  "required": [
    "user",
    "home",
    "workspaceDefault",
    "configDir",
    "has"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢plan_clone(target, components, workspace, profileUrl, skipRepo, ...)

Return a read-only plan for a target: compare it against the Workbench profile and list each component as `install`, `present`, or `manual`, with the commands that would run. It still runs a detection probe on the target (same access as inspect_target) but clones nothing and writes nothing. Parameter semantics: `components` restricts the diff to those ids (default: required+core); `workspace` sets the expected profile path on the target (default `~/opencode-workbench`); `profileUrl` overrides the git remote. Use it to preview before apply_clone, which performs the changes.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    },
    "components": {
      "description": "Component ids to include; defaults to required+core.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "workspace": {
      "description": "Target directory for the profile repo.",
      "type": "string"
    },
    "profileUrl": {
      "description": "Override profile git URL.",
      "type": "string"
    },
    "skipRepo": {
      "description": "Do not clone/update the profile repo on the target.",
      "type": "boolean"
    },
    "dryRun": {
      "description": "Report only; make no changes.",
      "type": "boolean"
    }
  },
  "required": [
    "target"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the inspected target."
    },
    "inspect": {
      "type": "object",
      "properties": {
        "user": {
          "type": "string",
          "description": "Detected user on the target."
        },
        "home": {
          "type": "string",
          "description": "Home directory on the target."
        },
        "workspaceDefault": {
          "type": "string",
          "description": "Default directory where the profile repo will be cloned."
        },
        "configDir": {
          "type": "string",
          "description": "OpenCode config directory on the target."
        },
        "osId": {
          "description": "OS identifier (e.g. ubuntu, debian, rhel).",
          "type": "string"
        },
        "osName": {
          "description": "Human-readable OS name.",
          "type": "string"
        },
        "osVersion": {
          "description": "OS version string.",
          "type": "string"
        },
        "kernel": {
          "description": "Kernel name and release.",
          "type": "string"
        },
        "arch": {
          "description": "CPU architecture (e.g. x86_64, aarch64).",
          "type": "string"
        },
        "packageManager": {
          "description": "Detected package manager (apt-get, dnf, yum, apk, pacman, zypper, or none).",
          "type": "string"
        },
        "nodeVersion": {
          "description": "Installed Node.js version, if any.",
          "type": "string"
        },
        "npmModules": {
          "description": "npm global modules directory.",
          "type": "string"
        },
        "opencodeBin": {
          "description": "Path to the opencode binary, if installed.",
          "type": "string"
        },
        "dockerRunning": {
          "description": "Whether the Docker daemon is reachable.",
          "type": "boolean"
        },
        "envPresent": {
          "description": "Space-separated names of credentials present on the target (values are never read).",
          "type": "string"
        },
        "has": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {
            "type": "boolean"
          },
          "description": "Detection flags for git, curl, node, npm, corepack, pnpm, docker, uv, gh, opencode, sudo."
        }
      },
      "required": [
        "user",
        "home",
        "workspaceDefault",
        "configDir",
        "has"
      ],
      "additionalProperties": false,
      "description": "Full inspection of the target."
    },
    "steps": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Component id."
          },
          "title": {
            "type": "string",
            "description": "Component name."
          },
          "tier": {
            "type": "string",
            "enum": [
              "required",
              "core",
              "optional"
            ],
            "description": "Component tier."
          },
          "action": {
            "type": "string",
            "enum": [
              "install",
              "present",
              "manual"
            ],
            "description": "Planned action: install, already present, or manual step."
          },
          "description": {
            "type": "string",
            "description": "What the component provides."
          },
          "command": {
            "description": "Preview of the privileged command that would run, for consent.",
            "type": "string"
          }
        },
        "required": [
          "id",
          "title",
          "tier",
          "action",
          "description"
        ],
        "additionalProperties": false
      },
      "description": "Per-component plan."
    },
    "toInstall": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Component ids that will be installed."
    }
  },
  "required": [
    "target",
    "inspect",
    "steps",
    "toInstall"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🔴apply_clone(target, confirm, components, workspace, profileUrl, ...)

Apply the Workbench profile to a target: clone the repo and install missing components (OpenCode CLI, Node/pnpm, MCP servers, skills, plugins, optional Docker). It OVERWRITES `<home>/.config/opencode/opencode.json`, copies `AGENTS.md`, resets an existing profile repo to `origin/main`, and runs global installs that need write permission (plus SSH for `mode:ssh`) and can take minutes. Writes a names-only `~/.env.workbench` (mode 600); never secret values. Consent-gated and idempotent: without `confirm:true` it returns the plan and changes nothing. Parameter semantics: `components` defaults to required+core; `workspace` defaults to `~/opencode-workbench`; `skipRepo` skips the clone/update; `profileUrl` overrides the git remote; `dryRun` returns the plan. To preview only, use plan_clone.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    },
    "confirm": {
      "description": "Set true to actually install. When absent, the call returns a plan and makes no changes.",
      "type": "boolean"
    },
    "components": {
      "description": "Component ids to include; defaults to required+core.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "workspace": {
      "description": "Target directory for the profile repo.",
      "type": "string"
    },
    "profileUrl": {
      "description": "Override profile git URL.",
      "type": "string"
    },
    "skipRepo": {
      "description": "Do not clone/update the profile repo on the target.",
      "type": "boolean"
    },
    "dryRun": {
      "description": "Report only; make no changes.",
      "type": "boolean"
    }
  },
  "required": [
    "target"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the target."
    },
    "workspace": {
      "type": "string",
      "description": "Directory where the profile repo was cloned."
    },
    "configPath": {
      "type": "string",
      "description": "Path of the written opencode.json."
    },
    "envPath": {
      "type": "string",
      "description": "Path of the written ~/.env.workbench template."
    },
    "installed": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Component id installed."
          },
          "code": {
            "type": "number",
            "description": "Exit code of the install step."
          },
          "output": {
            "type": "string",
            "description": "Captured install output (truncated)."
          }
        },
        "required": [
          "id",
          "code",
          "output"
        ],
        "additionalProperties": false
      },
      "description": "Components installed, with exit codes and output."
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Component ids skipped (already present or manual)."
    },
    "envVars": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Environment variable names listed in the env template."
    },
    "dryRun": {
      "type": "boolean",
      "description": "True when the run made no changes."
    },
    "model": {
      "type": "string",
      "description": "Default model selected for the target (DeepSeek when its key is present, else the OpenCode Zen free floor)."
    },
    "providerMode": {
      "type": "string",
      "enum": [
        "deepseek",
        "zen",
        "degraded"
      ],
      "description": "Which provider the model resolves to."
    },
    "degraded": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "reason"
        ],
        "additionalProperties": false
      },
      "description": "Capabilities disabled because required credentials are absent; fill the named env vars to enable them."
    },
    "requiresConfirmation": {
      "description": "True when the call returned a plan without applying; re-call with confirm:true to install.",
      "type": "boolean"
    },
    "plan": {
      "description": "Presented when confirmation is required.",
      "type": "object",
      "properties": {
        "toInstall": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Component ids that would be installed."
        },
        "commands": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "command": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "description": "Privileged command preview per component."
        }
      },
      "required": [
        "toInstall",
        "commands"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "target",
    "workspace",
    "configPath",
    "envPath",
    "installed",
    "skipped",
    "envVars",
    "dryRun",
    "model",
    "providerMode",
    "degraded"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢verify_clone(target, components, workspace, profileUrl, skipRepo, ...)

Re-check a target after a clone: return a per-component `present`/`missing` list plus whether `opencode.json` and `~/.env.workbench` exist. Read-only and idempotent: it runs a detection probe (SSH or local) and checks files, writing nothing. `target` selects the machine (`local` or SSH) and its `home` is where the `opencode.json` and `~/.env.workbench` checks run; `components` restricts the check to those ids (omit it to check every component, the default); `workspace` sets the profile path used by component checks. Use it after apply_clone and after component changes; for a pre-clone preview use plan_clone.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    },
    "components": {
      "description": "Component ids to include; defaults to required+core.",
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "workspace": {
      "description": "Target directory for the profile repo.",
      "type": "string"
    },
    "profileUrl": {
      "description": "Override profile git URL.",
      "type": "string"
    },
    "skipRepo": {
      "description": "Do not clone/update the profile repo on the target.",
      "type": "boolean"
    },
    "dryRun": {
      "description": "Report only; make no changes.",
      "type": "boolean"
    }
  },
  "required": [
    "target"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the target."
    },
    "configExists": {
      "type": "boolean",
      "description": "Whether opencode.json exists on the target."
    },
    "envExists": {
      "type": "boolean",
      "description": "Whether ~/.env.workbench exists on the target."
    },
    "components": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Component id."
          },
          "present": {
            "type": "boolean",
            "description": "Whether the component is detected as present."
          }
        },
        "required": [
          "id",
          "present"
        ],
        "additionalProperties": false
      },
      "description": "Per-component presence detection."
    },
    "missing": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Component ids detected as missing."
    }
  },
  "required": [
    "target",
    "configExists",
    "envExists",
    "components",
    "missing"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🔴install_component(target, component, workspace, confirm)

Install a single Workbench component by id (e.g. `node`, `opencode`, `npm-mcps`, `skills`) on a target; `component` must be an id from describe_workbench. Overwrites that component's files when present (e.g. `skills`/`plugins` replace the copies under `<home>/.config/opencode`); global installs need write permission and can take minutes. Idempotent and consent-gated: without `confirm:true` it returns the plan. Parameter semantics: `component` is required; `workspace` defaults to `~/opencode-workbench`; `confirm` defaults to false (plan only). Use it for one targeted component; use apply_clone to install the full default set.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    },
    "component": {
      "type": "string",
      "description": "Component id from describe_workbench."
    },
    "workspace": {
      "description": "Target directory for the profile repo.",
      "type": "string"
    },
    "confirm": {
      "description": "Set true to actually install. When absent, the call returns a plan and makes no changes.",
      "type": "boolean"
    }
  },
  "required": [
    "target",
    "component"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the target."
    },
    "workspace": {
      "type": "string",
      "description": "Directory where the profile repo was cloned."
    },
    "configPath": {
      "type": "string",
      "description": "Path of the written opencode.json."
    },
    "envPath": {
      "type": "string",
      "description": "Path of the written ~/.env.workbench template."
    },
    "installed": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "Component id installed."
          },
          "code": {
            "type": "number",
            "description": "Exit code of the install step."
          },
          "output": {
            "type": "string",
            "description": "Captured install output (truncated)."
          }
        },
        "required": [
          "id",
          "code",
          "output"
        ],
        "additionalProperties": false
      },
      "description": "Components installed, with exit codes and output."
    },
    "skipped": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Component ids skipped (already present or manual)."
    },
    "envVars": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Environment variable names listed in the env template."
    },
    "dryRun": {
      "type": "boolean",
      "description": "True when the run made no changes."
    },
    "model": {
      "type": "string",
      "description": "Default model selected for the target (DeepSeek when its key is present, else the OpenCode Zen free floor)."
    },
    "providerMode": {
      "type": "string",
      "enum": [
        "deepseek",
        "zen",
        "degraded"
      ],
      "description": "Which provider the model resolves to."
    },
    "degraded": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "reason"
        ],
        "additionalProperties": false
      },
      "description": "Capabilities disabled because required credentials are absent; fill the named env vars to enable them."
    },
    "requiresConfirmation": {
      "description": "True when the call returned a plan without applying; re-call with confirm:true to install.",
      "type": "boolean"
    },
    "plan": {
      "description": "Presented when confirmation is required.",
      "type": "object",
      "properties": {
        "toInstall": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Component ids that would be installed."
        },
        "commands": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "command": {
                "type": "string"
              }
            },
            "required": [
              "id"
            ],
            "additionalProperties": false
          },
          "description": "Privileged command preview per component."
        }
      },
      "required": [
        "toInstall",
        "commands"
      ],
      "additionalProperties": false
    }
  },
  "required": [
    "target",
    "workspace",
    "configPath",
    "envPath",
    "installed",
    "skipped",
    "envVars",
    "dryRun",
    "model",
    "providerMode",
    "degraded"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🔴remove_component(target, component, workspace, confirm, dryRun)

Uninstall one Workbench component by id from a target — the inverse of install_component — for a bounded, documented subset with an automated uninstall (e.g. `opencode`, `pnpm`, `npm-mcps`, `skills`, `docker-containers`); `component` must be an id from describe_workbench. Idempotent: an already-absent component reports `absent`; a component with no automated uninstall (system packages such as git/curl/node) reports `manual`. Destructive and consent-gated: without `confirm:true` it returns a preview and changes nothing, and it deletes only that component's files — never `opencode.json` or the profile repo. Parameter semantics: `workspace` sets the profile path some removals need; `dryRun` reports without changing. Use it to tear down one component; for several, call it per id.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    },
    "component": {
      "type": "string",
      "description": "Component id from describe_workbench."
    },
    "workspace": {
      "description": "Profile repo directory (used by components whose removal needs it).",
      "type": "string"
    },
    "confirm": {
      "description": "Set true to actually remove. When absent, the call returns a preview and makes no changes.",
      "type": "boolean"
    },
    "dryRun": {
      "description": "Report the action without changing anything.",
      "type": "boolean"
    }
  },
  "required": [
    "target",
    "component"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the target."
    },
    "id": {
      "type": "string",
      "description": "Component id acted on."
    },
    "action": {
      "type": "string",
      "enum": [
        "removed",
        "updated",
        "absent",
        "manual"
      ],
      "description": "What happened: removed, updated, already absent, or manual (no automated uninstall)."
    },
    "code": {
      "type": "number",
      "description": "Exit code of the action."
    },
    "output": {
      "type": "string",
      "description": "Captured output (truncated)."
    },
    "requiresConfirmation": {
      "description": "True when the call returned a preview without acting; re-call with confirm:true.",
      "type": "boolean"
    }
  },
  "required": [
    "target",
    "id",
    "action",
    "code",
    "output"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🔴update_component(target, component, workspace, confirm, dryRun)

Update one Workbench component in place by id: re-run its install script to fetch the current version (e.g. `opencode` re-runs the official installer; `npm-mcps` reinstalls the latest globals). It OVERWRITES the component's files, needs write permission, and can take minutes for global installs; the resolved version may change. Parameter semantics: `component` must be an id from describe_workbench; `workspace` defaults to `~/opencode-workbench`; `dryRun` previews; `confirm` defaults to false — set `confirm:true` to apply. For the whole profile use apply_clone.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    },
    "component": {
      "type": "string",
      "description": "Component id from describe_workbench."
    },
    "workspace": {
      "description": "Profile repo directory (used by components whose update needs it).",
      "type": "string"
    },
    "confirm": {
      "description": "Set true to actually update. When absent, the call returns a preview and makes no changes.",
      "type": "boolean"
    },
    "dryRun": {
      "description": "Report the action without changing anything.",
      "type": "boolean"
    }
  },
  "required": [
    "target",
    "component"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the target."
    },
    "id": {
      "type": "string",
      "description": "Component id acted on."
    },
    "action": {
      "type": "string",
      "enum": [
        "removed",
        "updated",
        "absent",
        "manual"
      ],
      "description": "What happened: removed, updated, already absent, or manual (no automated uninstall)."
    },
    "code": {
      "type": "number",
      "description": "Exit code of the action."
    },
    "output": {
      "type": "string",
      "description": "Captured output (truncated)."
    },
    "requiresConfirmation": {
      "description": "True when the call returned a preview without acting; re-call with confirm:true.",
      "type": "boolean"
    }
  },
  "required": [
    "target",
    "id",
    "action",
    "code",
    "output"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢list_required_credentials(target)

List the credentials the profile references, which the target already provides, and how to acquire each missing one. Value-blind: it reads only whether each env var is set — no values, no network, no writes — via one read-only probe. Parameter semantics: `target` selects the machine (`local` or SSH) and its `home` sets the returned `template` path and the env file the presence check reads; there are no other parameters. Returns `present`/`missing` var-name arrays plus one guidance record per credential (`var`, `purpose`, `url`, `method`, `command`). Use it after plan_clone to see what would degrade; act on one credential with run_auth_flow.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    }
  },
  "required": [
    "target"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the inspected target."
    },
    "present": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Credential names already present on the target."
    },
    "missing": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Credential names not present."
    },
    "template": {
      "type": "string",
      "description": "Path of the env file to fill in."
    },
    "credentials": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "var": {
            "type": "string",
            "description": "Environment variable name."
          },
          "label": {
            "type": "string",
            "description": "Human-readable name."
          },
          "purpose": {
            "type": "string",
            "description": "What uses it."
          },
          "url": {
            "description": "Where to create/obtain the key.",
            "type": "string"
          },
          "method": {
            "type": "string",
            "enum": [
              "paste",
              "oauth",
              "cli",
              "instruction"
            ],
            "description": "Recommended acquisition method."
          },
          "command": {
            "description": "Exact non-interactive command, when one exists.",
            "type": "string"
          },
          "optional": {
            "description": "True when only a subset of tools degrades without it.",
            "type": "boolean"
          },
          "present": {
            "type": "boolean",
            "description": "Whether the target already provides it (value never read)."
          }
        },
        "required": [
          "var",
          "label",
          "purpose",
          "method",
          "present"
        ],
        "additionalProperties": false
      },
      "description": "Every credential the profile references with its acquisition guidance."
    }
  },
  "required": [
    "target",
    "present",
    "missing",
    "template",
    "credentials"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢run_auth_flow(target, var)

Return the acquisition plan for one credential on a target: the provider URL, the exact non-interactive command when one exists (e.g. `opencode auth login`, `opencode mcp auth vercel`, `gh auth login`), and whether it is already present. Read-only and value-blind: it emits guidance and re-checks presence with one read-only probe; it does not run the commands or handle secret values. Parameter semantics: `var` must be an env var name returned by list_required_credentials (unknown names error); `target` selects the machine and its `home` is where the value should be written. Use it for a single credential; it does not replace that listing.

Eingabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "object",
      "properties": {
        "mode": {
          "type": "string",
          "enum": [
            "local",
            "ssh"
          ],
          "description": "Run on this machine (local) or a remote host (ssh)."
        },
        "host": {
          "description": "SSH host (required when mode=ssh).",
          "type": "string"
        },
        "user": {
          "description": "SSH user (defaults to ssh config / current user).",
          "type": "string"
        },
        "port": {
          "description": "SSH port.",
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 9007199254740991
        },
        "identityFile": {
          "description": "SSH private key path.",
          "type": "string"
        },
        "cwd": {
          "description": "Working directory on the target.",
          "type": "string"
        }
      },
      "required": [
        "mode"
      ],
      "description": "The machine to operate on: this host (local) or a remote host over SSH (ssh)."
    },
    "var": {
      "type": "string",
      "description": "Credential env var name from list_required_credentials (e.g. OPENCODE_API_KEY)."
    }
  },
  "required": [
    "target",
    "var"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Ausgabe-Schema

{
  "type": "object",
  "properties": {
    "target": {
      "type": "string",
      "description": "Label of the target."
    },
    "var": {
      "type": "string",
      "description": "Credential being acquired."
    },
    "method": {
      "type": "string",
      "enum": [
        "paste",
        "oauth",
        "cli",
        "instruction"
      ],
      "description": "Acquisition method."
    },
    "url": {
      "description": "Provider URL to open.",
      "type": "string"
    },
    "command": {
      "description": "Command for the agent/user to run.",
      "type": "string"
    },
    "present": {
      "type": "boolean",
      "description": "Whether the credential is present now."
    },
    "verified": {
      "type": "boolean",
      "description": "True when the credential is present and ready."
    },
    "next": {
      "type": "string",
      "description": "What to do next."
    }
  },
  "required": [
    "target",
    "var",
    "method",
    "present",
    "verified",
    "next"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}

Community

Diesen Server bewerten

Nachweis

Aktuelle Beobachtungen

verifiziertVersion nicht aufgezeichnet10 Tools