Atlas / MCP servers / shyn-labs / shyn

shynCAUTION

mcp/shyn-labs/shyn

shyn — a register of your days. Local-first memory for your Mac: pages, meetings, notes — encrypted on-device, recalled by your AI over MCP.

Verdict
CAUTION
Grade
C
Trust score
74 /100
Exposed tools
6 6r · 0w · 0d
Transport
stdio
License
NOASSERTION
Stars
1
01

Overview

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

[shyn.day](https://shyn.day) · macOS (Apple Silicon) · pre-alpha · Elastic License 2.0

Shyn is the always-on memory companion for your Mac. It quietly remembers what you see, hear, and read — your screen, your meetings, your browsing, your notes — and gives your AI assistant total recall over your life. Ask Claude "what did we decide in yesterday's standup?" or "where did I read about that retention bug?" and get an answer grounded in your own history, not the internet's.

Your memory stays local. Private by design. Everything shyn captures lives in an encrypted database on your Mac. Nothing it captures is uploaded, synced, or phoned home — the only bytes that ever leave your machine are the few snippets relevant to a question you chose to ask, sent to the AI you chose to ask it.

During beta, shyn also sends anonymous usage data. shyn runs across different macOS versions, hardware, and permission states, and those combinations produce bugs we cannot reproduce or test for. Most people who hit one never write in; they just quit the app. So shyn reports which features get used, what crashes, its version, and timing numbers, tied to a random ID that is not you.

It never includes anything shyn captured. No screen text, no transcripts, no searches, no identity. You choose on first run, and one click in Settings changes it any time. Turn it off and shyn is exactly what it promises above: nothing but your own questions leaving your machine.

Status: pre-alpha. Shyn is young, moving fast, and macOS-only (Apple Silicon). Expect rough edges and breaking changes. Install is a two-command Homebrew cask (brew install + shyn setup) — the apps are self-signed and re-signed l
Read from source at commit 2522efb06508OBSERVED · 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 status-ui --env GIT_AUTHOR_EMAIL=${GIT_AUTHOR_EMAIL} --env SHYN_PASSPHRASE=${SHYN_PASSPHRASE} --env SHYN_POSTHOG_KEY=${SHYN_POSTHOG_KEY} --env SHYN_TEST_NO_KEYCHAIN=${SHYN_TEST_NO_KEYCHAIN} -- npx -y @shyn/[email protected]
claude-desktop
{
  "mcpServers": {
    "status-ui": {
      "command": "npx",
      "args": [
        "-y",
        "@shyn/[email protected]"
      ],
      "env": {
        "GIT_AUTHOR_EMAIL": "${GIT_AUTHOR_EMAIL}",
        "SHYN_PASSPHRASE": "${SHYN_PASSPHRASE}",
        "SHYN_POSTHOG_KEY": "${SHYN_POSTHOG_KEY}",
        "SHYN_TEST_NO_KEYCHAIN": "${SHYN_TEST_NO_KEYCHAIN}"
      }
    }
  }
}
03

Exposed tools (6)

6 read · 0 write · 0 destructive.

ToolRiskDescription
forgetread
get_documentread
memory_statusread
recent_activityread
rememberread
search_memoryread
04

Trust audit

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

LayerWhat it checksResult
L0Provenance & inventoryPASS
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 (2 observation(s))
Network
declared (4 observation(s))
Shell
none-observed
Dependencies
not all pinned
Secrets in source
found

Findings (14)

MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
packages/capture-agent/Tests/CaptureCoreTests/CaptureCoreTests.swift:105
#expect(containsSecret("sk-ant-api03-abcdefghijklmnopqrstuvwxyz"))
MEDIUMHard-coded secrets · secret.anthropic · CWE-798, CWE-321
packages/daemon/test/analytics.test.ts:33
message: "auth failed for sk-ant-api03-AAAAAAAAAAAAAAAAAAAAAAAA",
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/engine/test/forget-race.test.ts:15
const SECRET = "RaceOrphanSecretNeverElsewhere";
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
packages/engine/test/forget.test.ts:13
const SECRET = "XyZZySecretTokenNeverElsewhere";
MEDIUMHard-coded secrets · secret.github · CWE-798, CWE-321
packages/capture-agent/Tests/CaptureCoreTests/CaptureCoreTests.swift:102
#expect(containsSecret("token ghp_abcdefghijklmnopqrstuvwxyz0123456789"))
MEDIUMHard-coded secrets · secret.private_key · CWE-798, CWE-321
packages/capture-agent/Tests/CaptureCoreTests/CaptureCoreTests.swift:104
#expect(containsSecret("-----BEGIN RSA PRIVATE KEY-----"))
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/daemon/test/analytics.test.ts:232
const root = j(import.meta.dirname, "../../capture-agent/Sources");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
packages/mcp-client/test/bundle.test.ts:20
const REPO_ROOT = join(fileURLToPath(import.meta.url), "../../../..");
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/node, esbuild, node-llama-cpp, sqlite-vec, tsx, typescript, vitest
Why it matters. 7 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/cli/package.json
unpdf, pdf-lib
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/engine/package.json
sqlite-vec, node-llama-cpp
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/mcp-client/package.json
@modelcontextprotocol/sdk, zod
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
packages/status-ui/package.json
electron, electron-builder, esbuild, jsdom
Why it matters. 4 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
docs/dist-bundle.md:256
- Keychain access (`KeychainKeyProvider`) shells out to the macOS `security`
Why it matters. asks the agent to read credentials

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 2522efb06508full audit observations/trust-audit/mcp-server/shyn-labs__shyn.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-112522efb06508CAUTIONC74first audit
06

Questions

What is the shyn MCP server?

shyn — a register of your days. Local-first memory for your Mac: pages, meetings, notes — encrypted on-device, recalled by your AI over MCP.

What tools does shyn expose?

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

Is shyn safe to connect to an agent?

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

What credentials does shyn need?

It reads GIT_AUTHOR_EMAIL, SHYN_PASSPHRASE, SHYN_POSTHOG_KEY and SHYN_TEST_NO_KEYCHAIN 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 shyn run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @shyn/status-ui at 0.0.0.

How current is this page?

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

Advertisement