registry  /  imsg-mcp  /  1.3.2

imsg-mcp@1.3.2

MCP server, CLI, and TUI for reading and sending iMessage / SMS on macOS — lets AI agents text humans, fetch conversation history, and stream-export entire chats. Includes a self-healing watchdog and an optional Rust acceleration module.

Static Scan Results

scanned 2h ago · by rust-scanner

Static analysis flagged 13 finding(s) at 72.0% confidence. This version is warn-only unless an AI or security-team review confirms malicious behavior.

Static reason
One or more suspicious static signals were detected.

Decision evidence

public snapshot
Behavioral surface
Source
ChildProcessCryptoDynamicRequireEnvironmentVarsFilesystemNativeBindingsShell
Supply chain
HighEntropyStringsUrlStrings
ManifestNo manifest risk signals triggered.
scanned 13 file(s), 484 KB of source, external domains: github.com, json-schema.org, www.nerdfonts.com

Source & flagged code

5 flagged · loading source
native/index.jsView file
55try { L56: return require('child_process').execSync('ldd --version', { encoding: 'utf8' }).includes('musl') L57: } catch (e) {
High
Child Process

Package source references child process execution.

native/index.jsView on unpkg · L55
5L6: const { readFileSync } = require('node:fs') L7: let nativeBinding = null
Medium
Dynamic Require

Package source references dynamic require/import behavior.

native/index.jsView on unpkg · L5
dist/shutdown-pPAPSnk3.jsView file
3import Database from "better-sqlite3"; L4: import { execFile } from "node:child_process"; L5: import { randomUUID, randomBytes, createHash } from "node:crypto"; ... L10: if (value.startsWith("~/") || value === "~") { L11: return join(homedir(), value.slice(2)); L12: } ... L15: function getEnv() { L16: return process.env.VITE_ENV ?? "development"; L17: } ... L162: mem_mb: heapMB(), L163: data: data != null ? typeof data === "object" ? data : { value: data } : void 0 L164: };
Low
Weak Crypto

Package source references weak cryptographic algorithms.

dist/shutdown-pPAPSnk3.jsView on unpkg · L3
dist/cli.jsView file
6Cross-file remote execution chain: dist/cli.js spawns dist/index.js; helper contains network access plus dynamic code execution. L6: import { c as checkLocalAccess, f as formatAccessReport, q as installShutdownHandlers, r as registerCleanup, E as looksLikeThreadSlug } from "./shutdown-pPAPSnk3.js"; L7: import { spawn } from "node:child_process"; L8: import { join, dirname } from "node:path"; ... L13: class LocalMcpClient { L14: constructor(onStderr) { L15: this.onStderr = onStderr; ... L20: this.proc = spawn(process.execPath, [entry, "mcp"], { L21: cwd: process.cwd(), L22: stdio: ["pipe", "pipe", "pipe"] ... L24: this.proc.stderr.on("data", (chunk) => { L25: this.onStderr?.(chunk.toString("utf8")); L26: });
High
Cross File Remote Execution Context

Source spawns a local helper that also contains network and dynamic execution context; review data flow before blocking.

dist/cli.jsView on unpkg · L6
native/imsg-native.darwin-arm64.nodeView file
path = native/imsg-native.darwin-arm64.node kind = native_binary sizeBytes = 2293632 magicHex = [redacted]
Medium
Ships Native Binary

Package ships native binary artifacts.

native/imsg-native.darwin-arm64.nodeView on unpkg

Findings

3 High4 Medium6 Low
HighChild Processnative/index.js
HighShell
HighCross File Remote Execution Contextdist/cli.js
MediumDynamic Requirenative/index.js
MediumEnvironment Vars
MediumShips Native Binarynative/imsg-native.darwin-arm64.node
MediumStructural Risk Force Deep Review
LowNon Install Lifecycle Scripts
LowScripts Present
LowWeak Cryptodist/shutdown-pPAPSnk3.js
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings