Atlas / MCP servers / braedonsaunders / Appkit

AppkitBLOCK

mcp/braedonsaunders/appkit

Modular production foundation for modern apps: design system, multi-tenancy, forms, analytics, workflows, integrations, documents, and more.

Verdict
BLOCK
Grade
F
Trust score
40 /100
Exposed tools
20 17r · 2w · 1d
Transport
streamable-http
License
AGPL-3.0
Stars
4
01

Overview

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

A production application foundation you can adopt one package at a time. Design system, app shell, multi-tenancy, forms, analytics, workflows, integrations, documents, communications, and more—composable without becoming inseparable.

See what you can build · Quick start · Packages · Architecture · Demo app · Documentation

Build your app, not its foundation

AppKit is the reusable product layer between a framework and your application. It gives you the pieces teams usually spend their first year rebuilding: a coherent interface, responsive navigation, tenant isolation, permissions, auditing

Read from source at commit 7b08efc91438OBSERVED · 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
claude mcp add appkit-workflows --env APPKIT_SECRET=${APPKIT_SECRET} --env NANGO_SECRET_KEY=${NANGO_SECRET_KEY} -- npx -y @braedonsaunders/[email protected]
claude-desktop
{
  "mcpServers": {
    "appkit-workflows": {
      "command": "npx",
      "args": [
        "-y",
        "@braedonsaunders/[email protected]"
      ],
      "env": {
        "APPKIT_SECRET": "${APPKIT_SECRET}",
        "NANGO_SECRET_KEY": "${NANGO_SECRET_KEY}"
      }
    }
  }
}
03

Exposed tools (20)

17 read · 2 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
AdministratorreadFull workspace access, including identity and setup administration.
AnalystreadBuilds dashboards and reports with read-only access to workspace records.
ChattyreadLow risk, but phones out.
DoubledreadTwo commands with one name.
EmailwriteSend a bounded, sanitized, token-templated email through an app-provided transport.
FixturereadTest destination
ImageMagickreadConvert, crop, and inspect images already in the workspace.
NamelessreadNo package name.
NetSuitewriteSync employees and locations from NetSuite via the REST/SuiteQL API. Uses Token-Based Authentication; all credentials are stored encrypted per connection.
OperatorreadCreates and updates operational records and runs assigned workflows.
Preconstructionread
RangedreadPinned to a range.
SmuggledreadPoints at a writable path.
Standardread
UploaderreadPushes artifacts to a remote host.
delete_thingdestructiveDeletes a thing.
get_thingreadReads a thing.
jqreadJSON processor baked into the golden base image.
ripgrepreadFast recursive search across the files in a workspace.
statusreadfilter
04

Trust audit

BLOCKgrade F · trust 40/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 (10 observation(s))
Network
declared (7 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
found

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/create-appkit/src/scaffold.ts:180
await exec(command, args, { cwd, maxBuffer: 10 * 1024 * 1024 })
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/desk/src/guest-agent.ts:51
exec(call: GuestExecCall): Promise<GuestExecResult>
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/desk/src/host.ts:374
exec(options: DeskExecOptions & { keepAlive: true }): Promise<DeskJob>
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/desk/src/host.ts:375
exec(options: DeskExecOptions): Promise<DeskExecSnapshot>
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
packages/office/src/index.ts:35
await exec(candidate, ['--version'], { timeout: 15_000 })
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
apps/playground/app/(demo)/packages/[slug]/demo/page.tsx:1360
request: { host: '169.254.169.254', port: 80, protocol: 'http', principal: 'desk agent-7' },
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
apps/playground/.env.example:6
APPKIT_DB_URL=postgresql://appkit_app:[email protected]:5599/appkit
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
apps/playground/.env.example:10
APPKIT_SUPER_URL=postgresql://postgres:[email protected]:5599/appkit
MEDIUMInventory / provenance · inv.binary · CWE-1104
packages/agent-tools/src/store.ts
store.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
packages/design-studio/src/defaults.ts:221
'Issued by Beacon',
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
apps/playground/app/(demo)/attachments/workbench.tsx:8
const PDF_URL = 'data:application/pdf;base64,JVBERi0xLjQKMSAwIG9iago8PCAvVHlwZSAvQ2F0YWxvZyAvUGFnZXMgMiAwIFIgPj4KZW5kb2JqCjIgMCBvYmoKPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFszIDAgUl0gL0NvdW50IDEgPj4KZW5kb2JqCjM
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/forms-pdf/src/templates/fonts.ts:13
'd09GMgABAAAAAJOQABMAAAAB1wQAAJMfAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoVWG9oiHJNMP0hWQVKDWQZgP1NUQVSBACciAIUwL1YRCAqD0WyC7wQLhWwAMIKsXgE2AiQDi1QEIAWHRAeTQVthoXEAd76EAbUT9EmW7Na2vium2zyR28F3r8aw+8yo3RytWpX
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/forms-pdf/src/templates/fonts.ts:16
'd09GMgABAAAAAF1cAA8AAAABNpgAAFz8AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoQCG70CHJJIBmA/U1RBVEAAhTwRCAqD5DSC8UcLhW4AATYCJAOLWAQgBYYwB5M/Gzf5BezYI24HEESqdqhqmIc18EO5q/nHrUkaYhTSL84q0+T/2wEnY1w/MLUqUC0sCo4DJUm
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/forms-pdf/src/templates/fonts.ts:19
'd09GMgABAAAAAHOcAA4AAAAA55wAAHNBAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoIOG7MOHJMCBmAAhTgRCAqC2xCCmm4LhRYAATYCJAOKKAQgBYRWB45FG+jDJcyz7IfuBAmtLer7plRwGz63Qx27+bloZCDYOIAQYu8u+f8TEuSIsYF1A/RVq3KETKwy1TX7VDg
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
packages/forms-pdf/src/templates/fonts.ts:22
'd09GMgABAAAAAIh8ABMAAAABXggAAIgKAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoNYG+d0HIsGP0hWQVKFEgZgP1NUQVSBTicuAIUuL34RCAqB0UCBoT4LhF4AMIK8OgE2AiQDiTgEIAWKPAeMfVtWQlEhJxtduhPyRo26TaWTbZPbbYNYt2vo2pwZtVmjVTWi/09
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
packages/auth/src/auth.test.ts:59
const pool = new Pool({ connectionString: 'postgresql://app:[email protected]:1/appkit' })
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/playground/app/(demo)/packages/[slug]/demo/page.tsx:608
secret: 'demo-provider-secret',
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/auth/src/auth.test.ts:8
const SECRET = 'test-secret-that-is-at-least-thirty-two-characters'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/remote-sessions/src/grants.test.ts:6
const secret = 'a-production-length-remote-viewer-secret'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/sms/src/sms.test.ts:167
const token = 'super-secret-twilio-token'
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/workflows/src/approval-tokens.test.ts:8
secret: 'a-production-secret-with-enough-entropy',
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
delete_thing
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.binary · CWE-1104
packages/apps/src/datasets.test.ts
datasets.test.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
packages/egress-proxy/src/sniff.test.ts
sniff.test.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README
LOWInventory / provenance · inv.binary · CWE-1104
packages/endpoints/src/endpoints.test.ts
endpoints.test.ts
Why it matters. a compiled or binary member cannot be reviewed from source
Fix. ship source, or explain the binary in the README

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 7b08efc91438full audit observations/trust-audit/mcp-server/braedonsaunders__appkit.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-117b08efc91438BLOCKF40first audit
06

Questions

What is the @braedonsaunders/appkit-mcp MCP server?

Modular production foundation for modern apps: design system, multi-tenancy, forms, analytics, workflows, integrations, documents, and more.

What tools does @braedonsaunders/appkit-mcp expose?

20 in total: 17 read-only, 2 that write, and 1 that can delete or overwrite (delete_thing). Every one is listed on this page with its risk.

Is @braedonsaunders/appkit-mcp safe to connect to an agent?

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

What credentials does @braedonsaunders/appkit-mcp need?

It reads APPKIT_SECRET and NANGO_SECRET_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 @braedonsaunders/appkit-mcp run?

It speaks streamable-http, so it runs as a service you connect to over the network. It is published on npm as @braedonsaunders/appkit-workflows at 3.0.0.

How current is this page?

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

Advertisement