{"data":{"name":"com.ascent-partners/opencode-workbench","title":null,"description":"Provision an OpenCode workbench and MCP stack on any Linux box, local or over SSH.","version":"5.0.1","websiteUrl":null,"repositoryUrl":"https://github.com/simonmak-ascent/opencode-workbench","remotes":[{"type":"streamable-http","url":"https://opencode-workbench.simonmak.com/mcp"}],"packages":[{"registryType":"npm","identifier":"@simonmak-ascent/opencode-workbench","version":"5.0.1","runtimeHint":"stdio","runtimeArguments":null,"environmentVariables":null}],"status":"active","isLatest":true,"publishedAt":"2026-10-29T16:35:09.464Z","updatedAt":"2026-10-29T16:35:09.464Z","source":"official-registry","verification":"official","confidence":100,"stars":null,"sources":[{"source":"official-registry","sourceId":"com.ascent-partners/opencode-workbench","verification":"official","confidence":100,"stars":null,"updatedAt":"2026-10-29T16:35:09.464Z","title":null,"description":"Provision an OpenCode workbench and MCP stack on any Linux box, local or over SSH.","websiteUrl":null,"repositoryUrl":"https://github.com/simonmak-ascent/opencode-workbench"}],"toolIndex":{"tools":[{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"apply_clone","title":"Apply a Workbench clone","description":"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.","inputSchema":{"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#"},"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"9517a180c63a76b2380148ee640526f08074279ead1bc959d659bd3fb3a23378","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"describe_workbench","title":"Workbench server info","description":"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.","inputSchema":{"type":"object","properties":{},"$schema":"http://json-schema.org/draft-07/schema#"},"annotations":{"readOnlyHint":true,"idempotentHint":true},"definitionHash":"c421b7c9fb85b692bd1ab259384d459918b74cbaad9efcb425e2202e18cc3a6d","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"inspect_target","title":"Inspect a Linux target","description":"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.","inputSchema":{"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#"},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"706db04071bfae3c2792198445b2cc06076ae553e78cc304a95329151fe1aee2","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"install_component","title":"Install one Workbench component","description":"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.","inputSchema":{"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#"},"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"b39dd2c5f0b09d272b6af6ecfb8966caec29cf1d0cb6292e4e341f98e6b8ef41","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"list_required_credentials","title":"List required credentials","description":"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.","inputSchema":{"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#"},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"67a8191a05b0ffd24a1a343ffc69da3991aedb740f9db3e732de193b70879ba1","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"plan_clone","title":"Plan a Workbench clone","description":"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.","inputSchema":{"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#"},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"f7d7084365622472a3d2910ebee6907d5a23fea44019ae6cf02f31182a4f09e8","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"remove_component","title":"Remove one Workbench component","description":"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.","inputSchema":{"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#"},"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"9c5dd80ef80705179526c50196aac9a17a19e3fdd7e8c1da8964fe2327ab21cf","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"run_auth_flow","title":"Acquire one credential (best-effort)","description":"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.","inputSchema":{"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#"},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"bac4d4acf2847fa318cf8e6a773eff6179ca41fae2306581b5e6c9041426bde5","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"update_component","title":"Update one Workbench component","description":"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.","inputSchema":{"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#"},"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"e25f94ea28519a53d9eb15b447b8feda01c75d2ff6217aa5599c854500d176e3","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"},{"serverName":"com.ascent-partners/opencode-workbench","endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","name":"verify_clone","title":"Verify a Workbench clone","description":"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.","inputSchema":{"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#"},"annotations":{"readOnlyHint":true,"idempotentHint":true,"openWorldHint":true},"definitionHash":"99ee900af34494dab20edb51ab2f4e92970c2ab2fed508c822f2af7a127f10c2","schemaStatus":"valid","origin":"official-registry","observedAt":"2026-11-03T00:47:11.842Z","metadataTrust":"untrusted"}],"endpoints":[{"endpointFingerprint":"bc2b313a3f38298af37125762ed220992f786b69b7700eaad56e2105876993e4","protocol":"streamable-http","status":"indexed","toolCount":10,"observedAt":"2026-11-03T00:47:11.842Z"}],"authentication":"unknown"},"connectionConfigurations":{"status":"ready","authentication":"not embedded","clients":{"Claude Desktop":{"mcpServers":{"com.ascent-partners/opencode-workbench":{"url":"https://opencode-workbench.simonmak.com/mcp"}}},"Cursor":{"mcpServers":{"com.ascent-partners/opencode-workbench":{"url":"https://opencode-workbench.simonmak.com/mcp"}}},"VS Code":{"servers":{"com.ascent-partners/opencode-workbench":{"type":"http","url":"https://opencode-workbench.simonmak.com/mcp"}}}}},"resourceType":"mcp-server","callable":true,"runtime":{"callable":true,"protocols":["mcp"]},"interfaces":[{"protocol":"mcp","transport":"streamable-http","url":"https://opencode-workbench.simonmak.com/mcp"},{"protocol":"mcp","package":"@simonmak-ascent/opencode-workbench","registryType":"npm","version":"5.0.1"}],"profile":{"apiVersion":"1","schemaVersion":"1","id":"mcp-server:com.ascent-partners%2Fopencode-workbench","resourceType":"mcp-server","canonicalUrl":"https://www.agentsjunction.com/api/v1/servers/com.ascent-partners%2Fopencode-workbench","name":"com.ascent-partners/opencode-workbench","description":"Provision an OpenCode workbench and MCP stack on any Linux box, local or over SSH.","interfaces":[{"protocol":"mcp","transport":"streamable-http","url":"https://opencode-workbench.simonmak.com/mcp"},{"protocol":"mcp","package":"@simonmak-ascent/opencode-workbench","registryType":"npm","version":"5.0.1"}],"capabilities":[],"identity":{"source":"official-registry","websiteUrl":null,"repositoryUrl":"https://github.com/simonmak-ascent/opencode-workbench","version":"5.0.1"},"verification":{"state":"official","confidence":100},"operations":{"resourceType":"mcp-server","name":"com.ascent-partners/opencode-workbench","status":"online","lastCheckedAt":"2026-11-03T20:16:14.664Z","lastSuccessfulCheck":"2026-11-03T20:16:14.664Z","latencyMs":100,"consecutiveFailures":0,"isStale":false,"checks":{"endpointReachable":true,"protocolValid":true,"agentCardValid":null,"mcpHandshakeValid":true},"lastSeen":null,"lastSuccessfulInteraction":null,"lastHealthCheck":"2026-11-03T20:16:14.664Z","source":{"type":"health-check","url":null},"observedAt":"2026-11-03T20:16:14.664Z"},"security":null,"timestamps":{"createdAt":"2026-10-29T16:35:09.464Z","updatedAt":"2026-10-29T16:35:09.464Z","observedAt":"2026-11-03T20:16:14.664Z"},"compatibility":{"serverVersion":"5.0.1","protocolVersions":[{"protocol":"mcp","version":null}]}}}}