amaran-mcp@0.1.1
VERIFIED· not startedPublisher claims: "Enables control of a single amaran light from a Mac through Bluetooth Mesh or amaran Desktop's local API, exposing tools for power, brightness, white, color, effects, and scene save/recall." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Verified here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
AMARAN_OPENAPI_KEYConfiguration, not credentials: AMARAN_BACKEND, AMARAN_MCP_HOME- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it with a scoped credential, under the guard. It asks for AMARAN_OPENAPI_KEY and talks to its vendor. Give the credential to the guard, not the server: the value never enters the server's environment and only travels to the host you bind. What the tools do with a real credential was not observed.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-13 and scored it 84/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
assert subprocess.run(["ps", "-p", str(child)], capture_output=True).returncode != 0 # the helper went tooFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.self._encoder = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.command = subprocess.run(["ps", "-p", str(pid), "-o", "command="], capture_output=True, text=True).stdoutFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.run(args, capture_output=True, text=True, timeout=3)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.helper = subprocess.Popen([str(helper_path()), "--classify-fd", str(write_fd)], stdout=subprocess.PIPE,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.return subprocess.Popen([sys.executable, "-c", code], start_new_session=True).pidFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.result = subprocess.run(command, capture_output=True, text=True, timeout=300)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.<summary>The Desktop API key</summary> The Desktop API wants a token in each request, signed with the key from an approved amaran OpenAPI application (apply in Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.process = subprocess.Popen(command(str(helper_path()), args.bundle, args.mute), stdout=subprocess.PIPE)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["launchctl", "bootout", f"{domain}/{LAUNCH_AGENT}"], capture_output=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.raw = subprocess.run(["ffmpeg", "-v", "error", "-i", str(path), "-ac", "1", "-ar", str(rate), "-f", "f32le", "-"],Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run([str(helper_path()), "--classify-file", str(path)], capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.out = subprocess.run([str(helper_path()), "--classify-file", str(track)], capture_output=True, text=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.process = subprocess.Popen(argv, start_new_session=True, stdin=subprocess.DEVNULL,Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.raw = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["launchctl", "bootstrap", domain, str(plist)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.child = int(subprocess.run(["pgrep", "-P", str(pid)], capture_output=True, text=True).stdout.split()[0])Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["zip", "-q", "-s", "0", str(root / f"{ARCHIVE}.zip"), "--out", str(joined)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."subprocess.Popen([sys.executable, '-c', 'import time; time.sleep(60)']); time.sleep(60)")Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.<summary>Bluetooth Mesh, directly</summary> The light acts as a Bluetooth Mesh proxy. The server connects when a tool runs, sends encrypted mesh messages (SidusFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.subprocess.run(["unzip", "-q", "-o", str(joined), "-d", str(root)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.