Atlas / MCP servers / derive-to / derive

deriveBLOCK

mcp/derive-to/derive

Review and approval for work made by AI agents. Fair Source, self-hostable, and MCP-native.

Verdict
BLOCK
Grade
F
Trust score
36 /100
Exposed tools
64 55r · 8w · 1d
Transport
stdio · streamable-http
License
NOASSERTION
Stars
30
01

Overview

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

Publish, review, and own your AI artifacts.

One durable URL for every version, comment, revision, and decision. Your team reviews the work; any compatible agent can act on the feedback. Hosted, or one self-hosted container.

Try free · Self-host · Docs

Try it now

No account or install is needed. One request publishes a live page:

curl -F [email protected] https://derive.to/v1/drafts   # or a .zip of a whole site
# → a live URL, plus a claim link that turns the draft into a
#   permanent, versioned artifact in your workspace

Give your agent a durable place to publish, find, and improve work:

npx skills add derive-to/derive --skill derive        # any agent that reads skills
claude mcp add --transport http derive https://derive.to/mcp   # or connect over MCP

Or paste this into a compatible coding agent and let it set itself up:

Read from source at commit 3c0918ddbae9OBSERVED · 2026-10-14
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 storage --env ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} --env CLOUDFLARE_API_TOKEN=${CLOUDFLARE_API_TOKEN} --env DERIVE_AUTH_SECRET=${DERIVE_AUTH_SECRET} --env DERIVE_MODEL_API_KEY=${DERIVE_MODEL_API_KEY} -- npx -y @derive/[email protected]
claude-desktop
{
  "mcpServers": {
    "storage": {
      "command": "npx",
      "args": [
        "-y",
        "@derive/[email protected]"
      ],
      "env": {
        "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}",
        "CLOUDFLARE_API_TOKEN": "${CLOUDFLARE_API_TOKEN}",
        "DERIVE_AUTH_SECRET": "${DERIVE_AUTH_SECRET}",
        "DERIVE_MODEL_API_KEY": "${DERIVE_MODEL_API_KEY}"
      }
    }
  }
}
03

Exposed tools (64)

55 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
AccountswriteModel accounts: the credential a machine uses to call a model. Write-only.
AgentsreadAgents: named workers with instructions, a machine, and what they can reach. Also the OAuth agents a user has authorized.
Analystreadanswers data questions
AnalyticsreadAggregate view statistics for an artifact.
ArtifactswriteDocuments (files and bundles): browse, publish, version, restore, and control access.
AssetsreadStandalone binary image assets referenced from bundles.
Builderreadbuilds things
CollectionsreadShareable groups of artifacts, each with its own members.
CommentsreadThreaded, anchored comments with reactions, edits, and resolution.
ContextsreadPapers imported from arXiv: each is a read-only Context whose artifact is the paper.
DerivereadA workspace for agent-made artifacts — documents, plans, decks, and fully-styled
DomainsreadCustom domains and vanity subdomains bound to artifacts.
FavoritesreadThe caller
FollowsreadFollow people to build the activity feed.
GMAIL_LISTread
GitHubwriteInstall-backed GitHub access for reading pull requests and posting comments.
JobswriteOne unit of agent work: someone asked, a schedule fired, or a graph opened a node. People ask, follow, answer, cancel, and retry; runners pull and report.
ModerationreadAbuse reports and takedown / reinstate actions.
NotificationsreadThe caller
OAuthreadOAuth 2.1 authorization-server endpoints and sign-in capabilities.
ProjectreadProject name
RealtimereadLive presence and cursor sharing on an artifact.
ReviewwriteReview rounds on an artifact: request a review, or send it back with a note.
Reviewerreadreviews pull requests
SessionreadIdentity: the signed-in user, public profiles, and the people directory.
SharingreadPer-artifact collaborator roles (shares) layered over the workspace baseline.
SlackreadSlack connection status and integration toggles.
VitalsreadClient-reported web-vitals ingestion.
WebhooksreadOutgoing webhooks and their delivery log.
WorkspacereadThe workspace itself: members, settings, invitations, and switching.
agentsread
askread
ask_userwriteAsk for a missing choice. Persist and pause this run until the person answers.
browse_libraryread
callread
catch_upread
checkpointread
clear_queuedestructive
commentread
derive_coderead
docs.searchreadSearch
fetchreadFetch one doc.
findread
get_balancereadAccount balance.
get_current_weatherreadCurrent weather for a place, by name. Returns temperature in Celsius, wind speed in km/h,
jobsread
list_artifactsread
list_workspacesread
organizeread
projectreadDuplicate project name
publishwrite
pullread
readread
release-noteswriteHow we write release notes.
same_toolreadd
searchreadSearch the docs.
shelveread
showread
stageread
svc.readreadread
weekly-briefreadBuild a cited weekly brief.
wx_getreadd
xreadX
yreadtwo
04

Trust audit

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

Findings (25)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
apps/api/worker-configuration.d.ts:3062
exec(input?: (string | URLPatternInit), baseURL?: string): URLPatternResult | null;
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
apps/api/worker-configuration.d.ts:11952
exec(query: string): Promise<D1ExecResult>;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHHard-coded secrets · secret.db_uri · CWE-798, CWE-321
deploy/selfhost.env.example:26
# DATABASE_URL=postgres://derive:password@postgres:5432/derive
MEDIUMInventory / provenance · inv.binary · CWE-1104
apps/api/migrate-auth-d1.ts
migrate-auth-d1.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
apps/api/src/app.ts:479
/^\/v1\/vitals$/, // anonymous Core Web Vitals beacon (telemetry, no state)
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
apps/api/scripts/dev-app-host.ts:27
const BASE = `http://127.0.0.1:${PORT}`
MEDIUMObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
apps/api/src/lib/brand-page-font.ts:8
"data:font/woff2;base64,d09GMgABAAAAAHLYABQAAAABAQgAAHJiAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGoYFG4GfHhyHTD9IVkFSh1s/TVZBUjwGYD9TVEFUgTgAhRAvfhEICvZo3iMLhEIAMIGoaAE2AiQDiQAEIAWIGgeLSQwHGyLxFWxXY6CewOalNZfP
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
apps/web/src/lib/skill-source.ts:1
const FRONTMATTER = /^?---[ \t]*\r?\n[\s\S]*?\r?\n---[ \t]*(?:\r?\n)*/
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
apps/web/src/pages/artifact/comment-composer.tsx:50
if (text.endsWith("\n")) runs.push({ text: "", mention: false })
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
apps/web/src/pages/artifact/diff-view.tsx:101
{o.line || ""}
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/cli/src/skills.js:42
const m = s.match(/^?---[ \t]*\r?\n([\s\S]*?)\r?\n---/)
MEDIUMObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
packages/core/src/publish.ts:47
let head = text.replace(/^/, "").trimStart()
MEDIUMHard-coded secrets · secret.db_uri · CWE-798, CWE-321
apps/api/test/bootstrap-plan.manual.ts:11
*   TEST_DATABASE_URL=postgres://postgres:[email protected]:55432/derive_test \
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/api/test/admin.test.ts:154
password: "safe-bootstrap-password",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/api/test/admin.test.ts:168
password: "safe-bootstrap-password",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/api/test/auth-session-cache.test.ts:186
const SECRET = "tamper-secret-at-least-16-chars"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/api/test/collection-access.test.ts:157
const token = "collection-invite-test-token"
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
apps/api/test/connections.test.ts:158
const secret = "sk_game_admin_9f3a7b2c1d"
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
apps/api/test/secret-scan.test.ts:6
["private key", "-----BEGIN PRIVATE KEY-----\nabc"],
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/api/test/content-mentions.test.ts:55
bot_token: "xoxb-content-mention",
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/api/test/hosted-tools.test.ts:194
bot_token: encryptSecret("xoxb-real-bot-token", "k"),
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/api/test/hosted-tools.test.ts:202
expect(body).not.toContain("xoxb-real-bot-token")
MEDIUMHard-coded secrets · secret.slack · CWE-798, CWE-321
apps/api/test/hosted-tools.test.ts:217
expect(calls[0]?.auth).toBe("Bearer xoxb-real-bot-token")
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
clear_queue
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
.dependency-cruiser.mjs
.dependency-cruiser.mjs
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose

Gates applied: no_behavioural_pass.

Audited 2026-10-14 · audit v0.4.1 · source sha 3c0918ddbae9full audit observations/trust-audit/mcp-server/derive-to__derive.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-143c0918ddbae9BLOCKF36first audit
06

Questions

What is the derive MCP server?

Review and approval for work made by AI agents. Fair Source, self-hostable, and MCP-native.

What tools does derive expose?

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

Is derive safe to connect to an agent?

No — not without reading the findings first. The audit graded it F (36/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 derive need?

It reads ANTHROPIC_API_KEY, CLOUDFLARE_API_TOKEN, DERIVE_AUTH_SECRET, DERIVE_MODEL_API_KEY, DERIVE_PASSKEY_RPID, DERIVE_SMOKE_PASSWORD, DERIVE_TOKEN, GH_TOKEN, GITHUB_TOKEN, OPENAI_API_KEY, ORTAM_API_KEY and SLACK_PROBE_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 derive run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as @derive/storage at 0.1.0.

How current is this page?

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

Advertisement