Atlas / MCP servers / array-ventures / Coworker

CoworkerCAUTION

mcp/array-ventures/coworker

Open-source AI agent with MCP UI, app builder, A2A protocol, skills marketplace, and multi-provider chat. Built with Mastra. Alternative to OpenClaw.

Verdict
CAUTION
Grade
B
Trust score
83 /100
Exposed tools
4 2r · 2w · 0d
Transport
streamable-http
License
Apache-2.0
Stars
43
01

Overview

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

Open-source AI agent built with Mastra. Acts as an AI team member that handles tasks, answers questions, and manages workflows via chat. Supports OpenAI, Anthropic, Google Gemini, NVIDIA, Groq, Kimi, and any OpenAI-compatible provider.

Features

  • AI chat assistant — answer questions, draft content, summarize documents, and brainstorm ideas
  • App builder — Lovable-like builder for creating internal dashboards and tools, maintained by agents with git version control
  • MCP UI — visual interface for managing MCP servers and building agent-maintained internal dashboards
  • MCP registry — discover and install MCP servers from the built-in registry
  • Skills marketplace — install community-built skills from ClawHub and skills.sh
  • A2A protocol — let other AI agents discover and communicate with Coworker via Agent-to-Agent protocol
  • Scheduled tasks — run recurring AI workflows on a cron schedule via Inngest
  • Google Workspace — manage emails, calendar, and docs through natural language
  • WhatsApp bridge — interact with your AI agent via WhatsApp messages
  • File workspace — upload, manage, and reference files in agent conversations
  • API access — secure API key authentication for programmatic access and integrations
  • Multi-provider AI — switch between OpenAI, Anthropic, Google, NVIDIA, Groq, Kimi, or any OpenAI-compatible endpoint

Screenshots

Read from source at commit 083cd6e4b776OBSERVED · 2026-10-08
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
claude mcp add coworker --env COWORKER_API_TOKEN=${COWORKER_API_TOKEN} --env GOG_GOOGLE_CLIENT_SECRET=${GOG_GOOGLE_CLIENT_SECRET} --env GOG_KEYRING_PASSWORD=${GOG_KEYRING_PASSWORD} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "coworker": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "COWORKER_API_TOKEN": "${COWORKER_API_TOKEN}",
        "GOG_GOOGLE_CLIENT_SECRET": "${GOG_GOOGLE_CLIENT_SECRET}",
        "GOG_KEYRING_PASSWORD": "${GOG_KEYRING_PASSWORD}"
      }
    }
  }
}
03

Exposed tools (4)

2 read · 2 write · 0 destructive.

ToolRiskDescription
BuildwriteExecute tasks and write code
CoworkerreadAn AI team member that helps with tasks, answers questions, and manages workflows.
FastreadQuick responses
PlanwriteResearch and create plans
04

Trust audit

CAUTIONgrade B · trust 83/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryWARN
L1Static analysis of the codeWARN
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

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

Findings (18)

MEDIUMInventory / provenance · inv.binary · CWE-1104
app/build/icon.icns
icon.icns
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
.agents/skills/mastra/references/common-errors.md:399
DATABASE_URL=postgresql://postgres:password@localhost:5432/mastra
MEDIUMSupply chain · supply.git_dep · CWE-829, CWE-1357
bun.lock:548
"@whiskeysockets/baileys": ["@whiskeysockets/[email protected]", "", { "dependencies": { "@cacheable/node-cache": "^1.4.0", "@hapi/boom": "^9.1.3", "async-mutex": "^0.5.0", "libsignal": "git+https://
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
app/src/renderer/src/components/settings/AdvancedBrowser.tsx:10
} from '../../mastra-client'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
app/src/renderer/src/components/settings/AdvancedEnvVars.tsx:2
import { useAppStore } from '../../stores/useAppStore'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
app/src/renderer/src/components/settings/AdvancedInstructions.tsx:2
import { useAppStore } from '../../stores/useAppStore'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
app/src/renderer/src/components/settings/AdvancedServer.tsx:2
import { MASTRA_BASE_URL, setMastraBaseUrl, setMastraApiToken } from '../../mastra-client'
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
app/src/renderer/src/components/superpowers/McpCard.tsx:2
import type { McpRegistryItem } from '../../mastra-client'
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
app/src/renderer/src/components/FileViewer.tsx:129
? new Blob([Uint8Array.from(atob(content), c => c.charCodeAt(0))])
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
app/src/renderer/src/components/viewers/DocxViewer.tsx:16
const binary = atob(content)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
app/src/renderer/src/components/viewers/PdfViewer.tsx:22
data: Uint8Array.from(atob(content), (c) => c.charCodeAt(0)),
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
app/src/renderer/src/components/viewers/PptxViewer.tsx:17
const binary = atob(content)
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
app/src/renderer/src/components/viewers/XlsxViewer.tsx:12
const binary = atob(content)
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
app/package.json
@ai-sdk/react, @codemirror/lang-css, @codemirror/lang-html, @codemirror/lang-javascript, @codemirror/lang-json, @codemirror/lang-markdown, @codemirror/lang-python, @electron-toolkit/preload
Why it matters. 42 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@mastra/ai-sdk, @mastra/core, @mastra/e2b, @mastra/fastembed, @mastra/libsql, @mastra/loggers, @mastra/mcp, @mastra/memory
Why it matters. 24 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
.agents/skills/mastra/references/common-errors.md:438
2. Load environment variables (for Node.js):
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
README.md:17
- **API access** — secure API key authentication for programmatic access and integrations
Why it matters. asks the agent to read credentials
INFOInventory / provenance · inv.oversize · CWE-1104
coworker.pen
coworker.pen
Why it matters. 1786692 bytes not read

Gates applied: no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha 083cd6e4b776full audit observations/trust-audit/mcp-server/array-ventures__coworker.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-08083cd6e4b776CAUTIONB83first audit
06

Questions

What is the Coworker MCP server?

Open-source AI agent with MCP UI, app builder, A2A protocol, skills marketplace, and multi-provider chat. Built with Mastra. Alternative to OpenClaw.

What tools does Coworker expose?

4 in total: 2 read-only, 2 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is Coworker safe to connect to an agent?

With care. The audit graded it B (83/100) and found 18 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does Coworker need?

It reads COWORKER_API_TOKEN, GOG_GOOGLE_CLIENT_SECRET and GOG_KEYRING_PASSWORD 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 Coworker run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as coworker at 0.2.0.

How current is this page?

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

Advertisement