Atlas / MCP servers / simonmak-ascent / opencode-workbench

opencode-workbenchBLOCK

mcp/simonmak-ascent/opencode-workbench

OpenCode Workbench: a reproducible, self-documenting, recoverable OpenCode development workstation — configuration, agent skills, MCP stack, and a clone MCP server for any Linux box

Verdict
BLOCK
Grade
F
Trust score
57 /100
Exposed tools
27 18r · 8w · 1d
Transport
stdio · streamable-http
License
MIT
Stars
1
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A reproducible, self-documenting, and recoverable OpenCode development workstation — configuration, agent skills, MCP stack, and an MCP server that clones the entire setup onto any Linux machine (locally or over SSH).

[](https://github.com/simonmak-ascent/opencode-workbench/actions/workflows/secret-scan.yml) [](https://github.com/simonmak-ascent/opencode-workbench/actions/workflows/tdqs.yml) [](https://registry.modelcontextprotocol.io/v0/servers?search=io.github.simonmak-ascent/opencode-workbench) [](https://glama.ai/mcp/servers/simonmak-ascent/opencode-workbench) [](https://github.com/simonmak-ascent/opencode-workbench/actions/workflows/mcp-server.yml) [](https://github.com/simonmak-ascent/opencode-workbench/actions/workflows/validate-docs.yml) [](LICENSE)

Homepage & remote MCP: https://opencode-workbench.simonmak.com · POST https://opencode-workbench.simonmak.com/mcp

Overview

This repository is the single source of truth for a complete cloud development workstation. Everything needed to rebuild from scratch is versioned here:

  • Workstation configuration and automation
  • OpenCode configuration (model, providers, MCP servers)
Read from source at commit 40cc0657513bOBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add opencode-workbench -- npx -y @simonmak-ascent/[email protected]
03

Exposed tools (27)

18 read · 8 write · 1 destructive. Blast radius: 1 tool can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
apply_clonewrite
create_websocket_connectionwriteCreate WebSocket connection for Puppeteer/Playwright
describe_workbenchread
download_filesreadHandle file downloads
execute_browserqlwriteExecute BrowserQL GraphQL queries
execute_functionwriteExecute custom JavaScript function in browser context
export_pagereadExport webpage with resources
generate_pdfreadGenerate PDF from URL or HTML content
get_configreadGet configuration
get_contentreadExtract rendered HTML content from a webpage
get_healthreadGet health status of Browserless instance
get_metricsreadGet metrics
get_sessionsreadGet active sessions
initialize_browserlessreadInitialize connection to Browserless instance
inspect_targetread
install_componentwrite
list_required_credentialsread
perplexity_searchreadSearch the web and return a ranked list of results with titles, URLs, snippets, and dates. Best for: finding specific URLs, checking recent news, verifying facts, discovering sources. No AI synthesis. For AI-generated answers with citations, use perplexity_ask instead.
plan_cloneread
remove_componentdestructive
run_auth_flowwrite
run_performance_auditwriteRun Lighthouse performance audit
take_screenshotreadTake screenshot of a webpage
test_connectionreadTest connection to Browserless instance
unblockreadBypass bot detection and anti-scraping measures
update_componentwrite
verify_cloneread
04

Trust audit

BLOCKgrade F · trust 57/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (5 observation(s))
Network
declared (11 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (20)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
mcp-server/src/components.ts:338
"Runs the OpenCode CLI in a bubblewrap sandbox: read-only system, writable workspace, and no access to ~/.ssh, cloud credentials or ~/.env.workbench.",
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/security/scan-secrets.sh:39
CRED_FILES=$(find "$WORKSPACE" -maxdepth 5 -type f \( -name '.env' -o -name '.env.*' -o -name '*.pem' -o -name '*.key' -o -name 'id_rsa' -o -name 'id_ed25519' -o -name 'credentials.json' -o -name 'cre
Why it matters. touches a credential store
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.devcontainer/devcontainer.json:27
"DATABASE_URL": "postgres://opencode:opencode@localhost:5432/memory",
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
scripts/maintenance/opencode-health-check.sh:365
if curl -s -o /dev/null "http://127.0.0.1:${FIGMA_SERVICE_PORT}/mcp" 2>/dev/null; then
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
vendor/browserless-mcp/dist/simple-server.js:13
this.browserlessUrl = 'http://172.22.0.1:3000';
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/architecture/secrets.md:47
| `DATABASE_URL` | `postgres://opencode:opencode@localhost:5432/memory` | Postgres connection |
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/config/environment-variables.md:37
| `DATABASE_URL` | `postgres://opencode:opencode@localhost:5432/memory` | `devcontainer.json` |
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/recovery/RECOVERY_CHECKLIST.md:11
- [ ] PostgreSQL accessible: `psql postgres://opencode:opencode@localhost:5432/memory -c "SELECT 1"`
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
docs/security-audit-report.md:51
- `devcontainer.json:27`: `DATABASE_URL` = `postgres://opencode:opencode@localhost:5432/memory`
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
.opencode/skills/browser-automation/SKILL.md:58
token: "browserless-local-token", protocol: "http"
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
remove_component
Why it matters. 1 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitleaks.toml
.gitleaks.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
mcp-server/src/version.ts:13
for (const rel of ["../package.json", "../../package.json"]) {
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, @vercel/analytics, zod, @types/node, typescript, vitest
Why it matters. 6 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
vendor/browserless-mcp/package.json
@modelcontextprotocol/sdk, puppeteer, playwright, axios, ws, zod, dotenv, @types/node
Why it matters. 16 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
vendor/perplexity-agent-mcp/package.json
@modelcontextprotocol/sdk
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
docs/research/02-mcp-agent-skills-best-practices.md:22
| **Streamable HTTP** | Remote, shared, independently deployed servers | Single `/mcp` endpoint; POST returns JSON or SSE; optional GET for server→client SSE; optional sessions with `MCP-Session-Id`;
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/CHANGELOG_WORKBENCH.md:42
and no access to `~/.ssh`, cloud credentials or `~/.env.workbench`. Wrapper:
Why it matters. asks the agent to read credentials
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
docs/recovery/RECOVERY_PLAYBOOK.md:118
| OpenCode not found | `curl -fsSL https://opencode.ai/install | bash` |
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
docs/tools/cli-data-tools.md:50
- **Install**: `curl -sSf https://install.surrealdb.com | sh`

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 40cc0657513bfull audit observations/trust-audit/mcp-server/simonmak-ascent__opencode-workbench.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1140cc0657513bBLOCKF57first audit
06

Questions

What is the opencode-workbench MCP server?

OpenCode Workbench: a reproducible, self-documenting, recoverable OpenCode development workstation — configuration, agent skills, MCP stack, and a clone MCP server for any Linux box

What tools does opencode-workbench expose?

27 in total: 18 read-only, 8 that write, and 1 that can delete or overwrite (remove_component). Every one is listed on this page with its risk.

Is opencode-workbench safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (57/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 1 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does opencode-workbench need?

It reads PERPLEXITY_API_KEY from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does opencode-workbench run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as perplexity-agent-mcp at 1.0.0.

How current is this page?

The grade is for one exact copy of the source (40cc0657513b), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement