← All scanned servers

Trust Card · Static snapshot

mcp-memory U

Ungraded — insufficient static coverage · 11 findings (0 critical) · scope excessive · Not ranked: insufficient static coverage.

Scanned 2026-10-19 · engine v0.1.3 (8 regex rules, OWASP-mapped) · upstream modelcontextprotocol/servers @ 51b6382 (2026-10-19)

Score breakdown

No numeric score or breakdown: insufficient static coverage. Findings remain actionable; absence of findings is not evidence of safety.

Insufficient static coverage: Unsupported source present. Findings remain actionable; absence of findings is not evidence of safety.

Coverage: limited

Static-heuristic scope: 19 analyzed / 22 discovered files; 1 unsupported source files; 3 excluded; 0 read errors; 0 truncations. This is not a semantic coverage percentage or proof of safety.

File coverage, applied rules and scan limits
{
  "mode": "static-heuristic",
  "status": "limited",
  "reasons": [
    "Unsupported source present"
  ],
  "limitations": [
    "Coverage describes the files read and regex rules applied, not semantic, runtime, or dependency coverage.",
    "Supported code is JavaScript, TypeScript, and Python; JSON/YAML receive only the credential rule.",
    "Skill instructions and other prose are not code-analyzed; declared controls are not verified enforcement.",
    "Ignored directories, declarations, and non-implementation assets are outside rule scope."
  ],
  "discoveredFiles": 22,
  "analyzedFiles": [
    {
      "path": "__tests__/atomic-save.test.ts",
      "scope": "code",
      "bytes": 5358,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/create-reporting.test.ts",
      "scope": "code",
      "bytes": 2990,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/entry-point.test.ts",
      "scope": "code",
      "bytes": 3834,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/eras.test.ts",
      "scope": "code",
      "bytes": 7235,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/file-lock.test.ts",
      "scope": "code",
      "bytes": 11924,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/file-path.test.ts",
      "scope": "code",
      "bytes": 7296,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/helpers.ts",
      "scope": "code",
      "bytes": 2721,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/knowledge-graph.test.ts",
      "scope": "code",
      "bytes": 32291,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/persistence.test.ts",
      "scope": "code",
      "bytes": 15216,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/resource.test.ts",
      "scope": "code",
      "bytes": 7922,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/server-version.test.ts",
      "scope": "code",
      "bytes": 2207,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/stdio-smoke.test.ts",
      "scope": "code",
      "bytes": 2411,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "__tests__/tools.test.ts",
      "scope": "code",
      "bytes": 30331,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "index.ts",
      "scope": "code",
      "bytes": 42089,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "package.json",
      "scope": "data",
      "bytes": 1602,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-002"
      ]
    },
    {
      "path": "tsconfig.json",
      "scope": "data",
      "bytes": 232,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-002"
      ]
    },
    {
      "path": "tsconfig.test.json",
      "scope": "data",
      "bytes": 546,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-002"
      ]
    },
    {
      "path": "version.ts",
      "scope": "code",
      "bytes": 970,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    },
    {
      "path": "vitest.config.ts",
      "scope": "code",
      "bytes": 697,
      "nonEmpty": true,
      "ruleIds": [
        "AT-SEC-001",
        "AT-SEC-002",
        "AT-SEC-003",
        "AT-SEC-004",
        "AT-SEC-005",
        "AT-SEC-006",
        "AT-SEC-007",
        "AT-COMP-001"
      ]
    }
  ],
  "unsupportedSourceFiles": [
    "Dockerfile"
  ],
  "excludedFiles": [
    {
      "path": "CHANGELOG.md",
      "reason": "outside-rule-scope"
    },
    {
      "path": "Dockerfile",
      "reason": "unsupported-implementation"
    },
    {
      "path": "README.md",
      "reason": "outside-rule-scope"
    }
  ],
  "readErrors": [],
  "truncation": [],
  "limits": {
    "maxFiles": 4000,
    "maxDepth": 12,
    "maxFileBytes": 1048576
  }
}

Fix first (11 critical/high)

SeverityRuleFindingRemediation
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
__tests__/create-reporting.test.ts:38
Evidence: await fs.unlink(testFilePath);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
__tests__/file-lock.test.ts:168
Evidence: await fs.unlink(lockPath);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
__tests__/file-lock.test.ts:222
Evidence: onceOnOpen(lockPath, "r", () => fs.unlink(lockPath));
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
__tests__/file-lock.test.ts:285
Evidence: await fs.unlink(lockPath);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
__tests__/knowledge-graph.test.ts:23
Evidence: await fs.unlink(testFilePath);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
index.ts:215
Evidence: await fs.unlink(breakerPath).catch(ignoreError);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
index.ts:225
Evidence: await fs.unlink(lockPath);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
index.ts:228
Evidence: await fs.unlink(breakerPath).catch(ignoreError);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
index.ts:268
Evidence: await fs.unlink(lockPath).catch(ignoreError);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
index.ts:320
Evidence: await fs.unlink(lockPath).catch(ignoreError);
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.
HIGHAT-SEC-005 (ASI02)Unrestricted Recursive File Deletion / Modification
index.ts:513
Evidence: await fs.unlink(tempFilePath).catch(() => {});
Enforce strict jail/root directories and require explicit human-in-the-loop confirmation before file deletions.

Permissions

Scope: excessive · Shell: enabled · Network egress: no · File deletion: enabled · Human approval: none

Provenance

License: SEE LICENSE IN LICENSE · Lockfile: no · Security policy: no · Signals: unverified origin

Independently scanned by the OpenTrustBench registry (not self-reported by the project). Static analysis only — no code executed, findings need human triage, counts may include test/example code. Static snapshot; re-scan before relying on it: npx @opentrustbench/cli scan https://github.com/modelcontextprotocol/servers/tree/main/src/memory. Scores move with every upstream commit; pages refresh weekly. How scoring works.