opencode-workbench
Provision an OpenCode workbench and MCP stack on any Linux box, local or over SSH.
使うべきか
品質と安全性
ツール定義とプロトコルへの準拠に関する自動分析に基づいています。
コンテキストコスト
これは、サーバーのツールがモデルのコンテキストに読み込まれるたびに消費されるおおよそのトークン数です。数が多いほど、ほかのタスクに使える注意が減ります。
インストール
ワンクリックインストール
これを `claude_desktop_config.json` ファイルに追加してください:
{
"mcpServers": {
"opencode-workbench": {
"command": "npx",
"args": [
"@simonmak-ascent/opencode-workbench"
]
}
}
}実行可能なパッケージ
4.0.1stdioリモートエンドポイント
https://opencode-workbench.simonmak.com/mcpstreamable-httpできること
ツール一覧
ツール(10)
🟢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.
入力スキーマ
{
"type": "object",
"properties": {},
"$schema": "http://json-schema.org/draft-07/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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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.
入力スキーマ
{
"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#"
}出力スキーマ
{
"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
}コミュニティ
エビデンス