Atlas / MCP servers / oolab-labs / Patchwork OS

Patchwork OSBLOCK

mcp/oolab-labs/patchwork-os

The decision layer for personal AI. Local-first runtime where agents automate across GitHub, Slack, Gmail & 45+ services — but every risky action can stop for your yes, workers (agents) earn autonomy from track record, and every decision leaves a receipt. Your models, your machine, your policy. Incl

Verdict
BLOCK
Grade
F
Trust score
26 /100
Exposed tools
200 264r · 58w · 4d
Transport
streamable-http
License
MIT
Stars
30
01

Overview

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

[](https://www.npmjs.com/package/patchwork-os) [](https://github.com/Oolab-labs/patchwork-os/actions/workflows/ci.yml) [](https://www.npmjs.com/package/patchwork-os) [](LICENSE)

You don't have an automation problem. You have a decision problem.

Every AI-agent horror story ends the same way: an action nobody stopped to question. Patchwork OS is the layer between the agent's impulse and the action — a local-first runtime where your AI can automate real work across your editor, GitHub, Slack, Gmail, and 45+ services, while anything consequential can be made to stop and ask you first.

Who it's for: developers and technical operators who already run agents against real systems — a repo that ships, an inbox that matters, a production service — and who want a record of what was allowed and why. It expects a terminal, a Node install, and comfort editing YAML.

Three ideas, one runtime:

  • Ask before acting. Every action is classified by blast radius — can it be undone, and how much breaks if it's wrong? Reversible things flow freely. Risky things wait in an approval queue with the evidence attached: what exactly will run, why it fired, and what happens if it's wrong.
  • Trust is earned, never assumed. Workers — named agents with jobs — start supervised and earn independence from their track record, per action type. Good at filing issues ≠ allowed to push code. One bad high-stakes action outweighs a hundred trivial successes. You set the ceiling; the math never raises it for them.
  • Every decision leaves a receipt. What was done, why it was allowed, and how it turned out — durable, replayable, explainable via patchwork judgments, the dashboard's
Read from source at commit cf38a666309cOBSERVED · 2026-10-08
Advertisement
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 claude-ide-bridge-extension --env AIRTABLE_ACCESS_TOKEN=${AIRTABLE_ACCESS_TOKEN} --env AIRTABLE_CLIENT_SECRET=${AIRTABLE_CLIENT_SECRET} --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env API_KEY=${API_KEY} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "claude-ide-bridge-extension": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "AIRTABLE_ACCESS_TOKEN": "${AIRTABLE_ACCESS_TOKEN}",
        "AIRTABLE_CLIENT_SECRET": "${AIRTABLE_CLIENT_SECRET}",
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "API_KEY": "${API_KEY}"
      }
    }
  }
}
03

Exposed tools (200)

264 read · 58 write · 4 destructive. Blast radius: 4 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
AsanareadRead workspaces, projects, and tasks.
ConfluencewriteRead and write Confluence pages and spaces.
DatadogreadQuery monitors, dashboards, and events.
DiscordreadRead messages, channels, and guilds.
GitHubreadRead open issues and pull requests via GitHub
GitLabwriteRead projects, issues, and merge requests.
GmailreadRead and triage your inbox.
HubSpotreadRead contacts, deals, and companies.
IntercomreadRead conversations and customer data.
JirawriteRead and create Jira issues across projects.
LinearreadRead and manage issues.
NotionwriteQuery databases, read pages, and create content.
PagerDutyreadRead incidents, services, and on-call rotations.
RoadmapreadQ3 plan
SlackwritePost messages and list channels.
StripereadRead payment events, customers, and subscriptions.
TelegramwriteSend messages and read chats via a Telegram bot.
ZendeskreadRead support tickets and customer context.
addLinearCommentwriteAdd a comment to a Linear issue. Requires Linear connector connected.
allowedToolreadok
alphaOnlyToolreadalpha
alwaysAvailablereadNo extension needed
annotated_toolreadhas cache_control
anotherToolreadAnother test tool
auditDependenciesreadDetect outdated packages (current vs latest). Supports npm, yarn, pnpm, cargo, pip. Complement to getSecurityAdvisories.
badreadFails
barCreadx
basereadBase branch or ref to diff against (default: main).
beginTransactionwriteStart a new multi-file edit transaction. Returns a transactionId for subsequent stageEdit calls.
betaOnlyToolreadbeta
bigCjkreadreturns a big CJK string
bigToolreadtest
blast-radiusreadBlast radius at a position: diagnostics + reference counts + risk badge. Wraps getChangeImpact.
blockingreadBlocks until gate opens
boomreadFails
brandNewToolreadnew
bridgeDoctorreadHealth check: extension, git, linters, test runners, GitHub CLI. Use when tools misbehave.
brokenreadThrows
build-checkreadCheck if the project builds successfully. Returns pass/fail with error summary.
butlerForgetreadRetract a fact by its seq (from butlerRecall). Writes a tombstone — the fact stops being believed, and the original row stays in the log so the history remains auditable.
butlerRecallreadRead what Butler currently believes about the user. Returns one value per subject+predicate, already resolved for contradictions and retractions. Filter by subject to narrow.
butlerRememberreadRecord one durable fact about the user (preference, household, standing context) as subject + predicate + value. Stored at agent trust: auditable, but not something Butler asserts on its own.
cached_toolreadcached
cancelClaudeTaskreadCancel a pending or running Claude task.
cancellablereadWaits for cancellation
chained-arrayreadd
chained-eachreadd
chained-outputsreadtest recipe
checkDocumentDirtyreadCheck if file has unsaved changes. Uses VS Code buffer when ext connected; heuristic otherwise.
circular-depswriteDetect circular import dependencies. Wraps getImportTree with cycle detection.
closeAllDiffTabsreadClose all diff tabs and clean up temp diff directories.
columnreadColumn number (1-based).
commitTransactionwriteWrite all staged edits atomically. All files are written; on partial failure, written files are NOT rolled back (use rollbackTransaction before commitTransaction to verify).
consistency-testreadtest recipe
contextBundlereadCollect IDE context in one call: active file, diagnostics, diff, editors, handoff note, git status.
countreadNumber of recent commits to show (default: 10).
coverage-gapreadIdentify untested functions by correlating coverage with document symbols. Wraps getCodeCoverage + getDocumentSymbols.
coworkreadLoad IDE context (open files, diagnostics, git status, project info, handoff note) and propose a Cowork action plan. Run before any computer-use task.
createFilewriteCreate file or directory within workspace. Uses VS Code when connected, native fs fallback.
createGithubIssueFromAICommentwriteCreate GitHub issue from AI comment. Call getAIComments first to populate cache.
createLinearIssuewriteCreate a new Linear issue. Requires Linear connector connected. Returns the created issue identifier and URL.
createPlanwriteCreate .claude-plan.md in workspace root. Markdown with sections and task checklists.
ctxGetTaskContextwriteUnified context for issue/PR/commit/error ref. Composes issue + linked commits + related traces. mode:
ctxQueryTraceswriteUnified query over approval / enrichment / recipe-run trails. Filter by traceType, time window, or natural key. Answers
ctxSaveTracereadRecord a problem+solution trace after resolving a task. Future sessions see it via ctxQueryTraces and the session-start digest. Keep problem + solution to one line each.
debug-contextreadSnapshot IDE state (open editors, diagnostics, recent terminal output) as debugging context.
deleteFiledestructiveDelete workspace file or directory. VS Code (with trash) when connected, native fs fallback.
deletePlandestructiveDelete a plan file from the workspace root.
deniedToolreadblocked
deploy-triggerwriteDeploy the service
deprecationsreadFind @deprecated APIs and count callers. Wraps searchWorkspace + findReferences.
descriptionreadWhat to refactor (e.g.
detectUnusedCodereadFind unused exports, locals, parameters via tsc --noUnusedLocals or ts-prune.
diagnose-and-fixwriteExplain the first diagnostic error, propose and preview a fix, apply it, then re-check diagnostics.
dualTimedToolreadHangs forever
echoreadno approval required
echo_toolreadEchoes its arguments
editTextdestructiveInsert/delete/replace text at 1-based line/col. Atomic multi-edit. Uses VS Code or native fs. Workspace files only.
enrichCommitwriteEnrich commit w/ linked issues. Parses #N / GH-N refs from message, fetches issue state via gh, classifies close vs ref. Missing issues flagged unresolved — not errors.
enrichStackTracereadMap stack-trace frames to introducing commits via git blame. Parses Node/Python/browser traces, filters to in-workspace files, returns per-frame commit + overall top suspect.
envelope-flatreadd
existingToolreadexisting
explain-diagnosticsreadExplain diagnostics (errors/warnings) for a file and suggest fixes.
explainDiagnosticreadBundle diagnostic details + code context (±10 lines) + go-to-definition + callers (up to 5) for a file/line/character position.
explore-typereadExplore a type: declaration, definition, and all implementations. Wraps getHover + goToDeclaration + goToTypeDefinition + findImplementations.
extensionOnlyreadRequires extension
extensionOnlyToolreadRequires extension
failingreadAlways fails
fake_greetreadgreet tool
fetchCalendarEventsreadFetch upcoming Google Calendar events. Returns events for the next N days. Requires Google Calendar connector connected.
fetchGithubIssuereadFetch a GitHub issue by URL or owner/repo#number ref. Returns title, body, state, labels, assignees, and author. Requires GitHub connector connected.
fetchGithubPRreadFetch a GitHub pull request by URL or owner/repo#number ref. Returns title, body, state, branches, labels, review decision, and diff stats. Requires GitHub connector connected.
fetchLinearIssuereadFetch a Linear issue by identifier or URL. Returns title, description, state, assignee, labels, and priority. Requires Linear connector connected.
fetchSentryIssuereadFetch a Sentry issue and enrich its stack trace with git blame. Returns per-frame commit attribution + top suspect commit. Requires Sentry connector connected.
fetchSlackProfilereadGet the connected Slack workspace name, team ID, and bot user ID. Use to confirm Slack is connected.
filereadPath to the changed file to review (workspace-relative or absolute).
filePathreadFile to scope diagnostics to (optional; omit for workspace-wide first error).
filesreadComma-separated list of files to consider (optional, scopes the refactor).
filterreadOptional test filter pattern (e.g. file name or test name substring).
find-callersreadFind every caller of a symbol with file:line locations. Wraps searchWorkspaceSymbols + getCallHierarchy(incoming) + findReferences.
findFilesreadFind files by name/glob pattern in the workspace. Respects .gitignore.
findRelatedTestswriteFind test files that cover a source file via import search + name patterns.
fixAllLintErrorsreadAuto-fix lint errors. VS Code source.fixAll when connected, falls back to eslint/biome/ruff.
flat-arrayreadd
flat-eachreadd
flat-outputsreadtest recipe
fooAreadx
fooBreadx
formatAndSavewriteFormat a file and save it in one call (formatDocument + saveDocument). Formatter errors propagate; save is not attempted on format failure.
formatDocumentreadFormat file via VS Code formatter or CLI fallback (prettier/biome/black/gofmt/rustfmt).
fw-bugreadwatch + use file
gatedToolreadrequires approval
gen-claude-mdwriteGenerate bridge workflow rules and quick-reference table, then write them into CLAUDE.md.
generate-testsreadGenerate missing unit tests for a file using the project
generateAPIDocumentationreadGenerate API docs (markdown/JSON) for TS/JS exported symbols. Extracts fns, classes, interfaces, JSDoc.
generateTestsreadGenerate test scaffold from exported fns/classes. Returns describe/it content; does not write file.
getAICommentsreadScan open docs for AI-tagged comments (// AI: <severity>: <msg>). Severity: fix/todo/question/warn/task.
getActivityLogreadQuery recent tool call log: names, timing, status, percentiles, co-occurrence.
getAnalyticsReportreadSession analytics: top tools by call count, hook events, recent automation tasks.
getArchitectureContextreadArchitectural overview via codebase-memory graph: module boundaries, dependencies,
getBridgeStatusreadBridge health and connection info
getBufferContentreadRead workspace file from VS Code buffer including unsaved changes. Use before editText. Returns isDirty flag. Workspace files only.
getClaudeTaskStatusreadGet the status and output of a Claude task enqueued with runClaudeTask.
getCodeCoveragereadParse coverage report (lcov/coverage-summary.json/clover.xml) → per-file line/branch/fn %. Does not run tests.
getCommitDetailswriteFull commit details: author, date, message, changed files, optional diff patch.
getCommitsForIssuewriteReverse commit→issue lookup from the persisted enrichment log. Returns commits that referenced the given issue, newest first.
getConnectorStatusreadReturns the auth status of all MCP connectors (GitHub, Linear, Sentry). Shows whether each is connected, when the token expires, and whether re-authorization is needed.
getCurrentSelectionreadGet the current text selection in the editor
getDependencyTreereadDependency tree (npm/cargo/go/pip). Auto-detects package manager. Returns names and versions.
getDiagnosticsreadFake low-tier tool
getDiffBetweenRefsreadDiff between two git refs (branches/tags/commits). statOnly for file-level summary only.
getDiffFromHandoffreadCompute what changed since the handoff note was written: git diff summary + new/resolved diagnostics.
getDocumentSymbolsreadList symbols (fns, classes, interfaces, methods) in a file: names, kinds, lines, parents.
getFileTreereadWorkspace file tree. Respects .gitignore. Skips node_modules, .git, dist, build, coverage.
getGitDiffreadGet the git diff output for the workspace or a specific file
getGitHotspotsreadMost frequently changed files in git history. High frequency → active dev or instability.
getGitLogreadGet recent git log entries for the workspace or a specific file
getGitStatusreadShow working tree status. More detail here.
getHoverAtCursorreadHover docs for symbol at current cursor. Zero-input wrapper around getHover.
getImportTreereadTree of local imports for a file. Useful for understanding deps and finding circular imports.
getLatestSelectionreadGet the most recent text selection (even if not in the active editor)
getOpenEditorsreadOpen files/tabs with isDirty, isActive when ext connected. Fallback: session-opened files only.
getOrchestratorStatusreadShow the orchestrator bridge status: which IDE instances are connected, their workspaces, health, and how many Claude sessions are active.
getPRTemplatereadPR description from commits and diff stats vs base branch. Returns markdown → pass to githubCreatePR.
getPerformanceReportreadLive performance assessment: per-tool latency percentiles, throughput, extension health, session counts, and overall health score.
getPlanreadRead plan file. Returns title, sections, tasks, and completion status.
getProjectContextwriteCached session-start brief: active file, errors, recent commits, modules. Skips cold-start re-exploration.
getProjectInforeadProject overview: name/version, languages, pkg manager, scripts, deps, config, git. Call at session start.
getSecurityAdvisoriesreadSecurity audit: CVEs with severity and remediation. Auto-detects npm/yarn/pnpm/cargo/pip-audit.
getSessionUsagereadToken usage estimate for this session: schema size, call counts, largest tool results.
getSymbolHistorywriteSymbol evolution: LSP definition + git blame on definition site + file commit history.
getToolCapabilitiesreadAvailable CLI tools, ext connection state, and which features are functional vs stub-only.
getTypeHierarchyreadType hierarchy: supertypes (parents) and subtypes (impls/subclasses). Requires LSP support.
getWorkspaceFoldersreadGet workspace folders
getWorkspaceSettingsreadRead VS Code workspace settings. Filter by section (e.g.
git-reviewreadReview uncommitted changes (staged + unstaged) against a base branch before commit or PR.
gitAddwriteStage files for commit. Omit to stage all tracked (git add -u). addUntracked:true for new files.
gitBlamewritePer-line last modifier and commit. Trace why code was written or find the introducing commit.
gitCheckoutwriteSwitch to a branch, or create and switch to a new branch. Use create: true to create from HEAD or a specified base.
gitCommitreadFake high-tier tool
gitFetchreadFetch updates from a remote without merging. Updates remote-tracking branches so gitListBranches
gitListBranchesreadList git branches. Returns local branches with the current branch marked. Pass includeRemote: true for remote-tracking branches.
gitPullreadPull changes from a remote into the current branch. Defaults to origin with merge. Use rebase: true for linear history.
gitPushwritewrite tool
gitStashreadStash current changes to get a clean working tree. Required before switching branches with uncommitted changes.
gitStashListreadList all stash entries in the repository.
gitStashPopreadRestore stashed changes to the working tree. Pops the most recent stash by default,
githubActionsreadComposite GitHub Actions tool. Dispatches to the appropriate operation based on
githubApprovePRread[Deprecated: use githubPR instead]
githubCommentIssueread[Deprecated: use githubIssue instead]
githubCreateIssueread[Deprecated: use githubIssue instead]
githubCreatePRread[Deprecated: use githubPR instead]
githubGetIssueread[Deprecated: use githubIssue instead]
githubGetPRDiffread[Deprecated: use githubPR instead]
githubGetRunLogsread[Deprecated: use githubActions instead]
githubIssuereadComposite GitHub issue tool. Dispatches to the appropriate operation based on
githubListIssuesread[Deprecated: use githubIssue instead]
githubListPRsread[Deprecated: use githubPR instead]
githubListRunsread[Deprecated: use githubActions instead]
githubMergePRread[Deprecated: use githubPR instead]
githubPRreadComposite GitHub pull request tool. Dispatches to the appropriate operation based on
githubPostPRReviewread[Deprecated: use githubPR instead]
githubViewPRread[Deprecated: use githubPR instead]
gmail-health-checkreadVerify Gmail connector is working.
goodreadSucceeds
guardedreadd
health-checkreadFull health check: tests, diagnostics, security advisories, git status, dependency audit. For scheduled nightly/hourly runs.
hw.greetwriteReturns a greeting. Replace this with your own logic to create a custom tool.
ide-coveragereadGenerate an HTML coverage heatmap and open in browser. Requires --full mode (getCodeCoverage + openInBrowser).
ide-depsdestructiveD3 force-directed dependency graph for an entry point, opened in browser. Requires --full mode.
ide-diagnostics-boardreadWorkspace diagnostics grouped by severity/file, rendered as a sortable HTML table in the browser.
im_sendwriteSend an iMessage to a phone number (E.164 like +14155551234) or
imports-ofreadList files importing a symbol with reference counts. Wraps findReferences + getImportTree.
integ_helloreadt
internalTimeoutToolreadHas internal timeout
internal_fields_toolreadhas internal fields
invalid-namereadx
json-recipereada json recipe
jumpToFirstErrorreadJump to first workspace error (getDiagnostics→openFile→decoration). Returns {found:false} if none.
keepMereadstays
04

Trust audit

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

LayerWhat it checksResult
L0Provenance & inventoryWARN
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 (14 observation(s))
Network
declared (8 observation(s))
Shell
declared (6 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

CRITICALHard-coded secrets · secret.slack · CWE-798, CWE-321
src/companions/registry.ts:69
SLACK_BOT_TOKEN: "<xoxb-your-token>",
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/index.ts:6962
exec(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
deploy/macos/install-mac-bridge.sh:95
SSH_KEY="${SSH_KEY:-$HOME/.ssh/id_ed25519}"
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
deploy/macos/install-mac-bridge.sh:96
[[ -f "$SSH_KEY" ]] || SSH_KEY="$HOME/.ssh/id_rsa"
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
deploy/macos/install-mac-bridge.sh:109
(3) ~/.ssh/config alias  e.g. pw-bridge
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
deploy/macos/install-mac-bridge.sh:129
echo "Detected '$VPS_HOST' is a ~/.ssh/config alias — host + identity resolved from there."
Why it matters. touches a credential store
HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
deploy/macos/install-mac-bridge.sh:168
echo "SSH target: $SSH_TARGET (resolved via ~/.ssh/config)"
Why it matters. touches a credential store
HIGHNetwork egress · net.tls_off · CWE-200, CWE-319
src/connectors/obsidian.ts:31
const tlsAgent = new Agent({ connect: { rejectUnauthorized: false } });
Why it matters. certificate verification is disabled
Fix. leave verification on
MEDIUMInventory / provenance · inv.binary · CWE-1104
intellij-plugin/gradle/wrapper/gradle-wrapper.jar
gradle-wrapper.jar
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
scripts/smoke/run-all.mjs:140
console.log(`Bridge ready. Token: ${TOKEN.slice(0, 8)}...\n`);
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/index.ts:777
console.log(`claude-ide-bridge print-token — Print bridge auth token
MEDIUMInformation disclosure · disclose.log_secret · CWE-209, CWE-532
src/index.ts:944
console.log(`claude-ide-bridge token-efficiency — Token usage tools
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
src/connectors/paystack.ts:234
if (params.callbackUrl) body.callback_url = params.callbackUrl;
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile:24
CMD wget -qO- "http://127.0.0.1:${PORT:-18765}/ping" || exit 1
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
dashboard/src/app/recipes/[...name]/_edit/_components/YamlEditor.tsx:88
.pw-cm-editor .ͼo { color: var(--orange); }          /* keyword */
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
dashboard/src/app/recipes/[...name]/_edit/_components/YamlEditor.tsx:89
.pw-cm-editor .ͼm { color: var(--green); }           /* string */
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
dashboard/src/app/recipes/[...name]/_edit/_components/YamlEditor.tsx:90
.pw-cm-editor .ͼl { color: var(--blue, #5080c0); }   /* number */
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
dashboard/src/app/recipes/[...name]/_edit/_components/YamlEditor.tsx:91
.pw-cm-editor .ͼc { color: var(--ink-3); font-style: italic; }  /* comment */
MEDIUMObfuscation / stealth · obf.homoglyph · CWE-506, CWE-94
dashboard/src/app/recipes/[...name]/_edit/_components/YamlEditor.tsx:92
.pw-cm-editor .ͼd { color: var(--accent); }          /* definition */
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
src/__tests__/claudeDriver.test.ts:585
"Error: invalid key sk-ant-api03-ABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890abcdef";
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
src/__tests__/claudeDriver.test.ts:623
"key=sk-ant-api03-AAAAAAAAAAAAAAAAAAAAAA and Bearer BBBBBBBBBBBBBBBBBBBB";
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
src/drivers/__tests__/gemini.test.ts:826
const FAKE_TOKEN = "sk-ant-oat01-test-token-for-h5";
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
src/__tests__/install.test.ts:160
"DSN=postgresql://user:p@ss=word@localhost/db",
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
src/__tests__/install.test.ts:166
"postgresql://user:p@ss=word@localhost/db",
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
src/connectors/__tests__/postgres.test.ts:235
connectionString: "postgres://u:p@localhost/db",

Gates applied: critical_finding, no_behavioural_pass.

Audited 2026-10-08 · audit v0.4.1 · source sha cf38a666309cfull audit observations/trust-audit/mcp-server/oolab-labs__patchwork-os.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-08cf38a666309cBLOCKF26first audit
06

Questions

What is the Patchwork OS MCP server?

The decision layer for personal AI. Local-first runtime where agents automate across GitHub, Slack, Gmail & 45+ services — but every risky action can stop for your yes, workers (agents) earn autonomy from track record, and every decision leaves a receipt. Your models, your machine, your policy. Incl

What tools does Patchwork OS expose?

200 in total: 264 read-only, 58 that write, and 4 that can delete or overwrite (deleteFile, deletePlan, editText, ide-deps). Every one is listed on this page with its risk.

Is Patchwork OS safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (26/100) and found 8 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: 4 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does Patchwork OS need?

It reads AIRTABLE_ACCESS_TOKEN, AIRTABLE_CLIENT_SECRET, ANTHROPIC_API_KEY, API_KEY, APNS_KEY, APNS_KEY_ID, ASANA_CLIENT_SECRET, AUDIT_TEST_SECRET, BRIDGE_TOKEN, BRIDGE_WEBHOOK_SECRET, CALCOM_API_KEY and CIRCLECI_API_TOKEN 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 Patchwork OS run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as claude-ide-bridge-extension at 1.4.25.

How current is this page?

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

Advertisement