Skills/Glama/amaran-mcp

amaran-mcp@0.1.1

VERIFIED· not started

Publisher 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.

Registry GlamaPublisher jtannahill · publishing for 1 daysInstalls 0Last detonated 19 h ago
$npx skills add amaran-mcp
WatchReport an issue

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.

$vet-skills run --net declared -- <the server's command>

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 deviations
t+CategoryObserved action
0.0sprocessno install scripts in bundle
0.1sprocessdependency install exit 1 ·
0.1sclaimednot started: dependency install failed (exit 1); the server itself was not observed
0.1sprocessscript backend runs setup only
0.1sprocessno install scripts to re-run

Static findings

MEDIUM
Python subprocess execution detectedtests/test_reliability.py:240 · Python subprocess execution detectedassert 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.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/music/recorder.py:80 · Python subprocess execution detectedself._encoder = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/config.py:66 · Python subprocess execution detectedcommand = 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.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/music/applemusic.py:40 · Python subprocess execution detectedreturn 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.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/__init__.py:64 · Python subprocess execution detectedhelper = 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.
AST05
MEDIUM
Python subprocess execution detectedtests/test_reliability.py:207 · Python subprocess execution detectedreturn 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.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/music/capture.py:60 · Python subprocess execution detectedresult = 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.
AST05
HIGH
Collapsed <details> block carrying instructionsREADME.md:373 · Collapsed <details> block carrying instructions<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.
AST01
MEDIUM
Python subprocess execution detectedtools/capture_app.py:81 · Python subprocess execution detectedprocess = 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.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/__init__.py:127 · Python subprocess execution detectedsubprocess.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.
AST05
MEDIUM
Python subprocess execution detectedtools/live_check.py:35 · Python subprocess execution detectedraw = 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.
AST05
MEDIUM
Python subprocess execution detectedtools/extract_features.py:31 · Python subprocess execution detectedout = 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.
AST05
MEDIUM
Python subprocess execution detectedtools/demo_timeline.py:40 · Python subprocess execution detectedout = 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.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/music/control.py:79 · Python subprocess execution detectedprocess = 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.
AST05
MEDIUM
Python subprocess execution detectedtools/benchmark_tempo.py:28 · Python subprocess execution detectedraw = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedsrc/amaran_mcp/__init__.py:144 · Python subprocess execution detectedsubprocess.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.
AST05
MEDIUM
Python subprocess execution detectedtests/test_reliability.py:234 · Python subprocess execution detectedchild = 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.
AST05
MEDIUM
Python subprocess execution detectedtools/ssme.py:37 · Python subprocess execution detectedsubprocess.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.
AST05
MEDIUM
Python subprocess execution detectedtests/test_reliability.py:231 · Python subprocess execution detected"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.
AST05
HIGH
Collapsed <details> block carrying instructionsREADME.md:385 · Collapsed <details> block carrying instructions<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.
AST01
MEDIUM
Python subprocess execution detectedtools/ssme.py:38 · Python subprocess execution detectedsubprocess.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.
AST05

Cost to the agent

Instructions loaded
≈35 tok
1 file · 81 in bundle
Tool list per prompt
≈0 tok
0 tools · 0 per tool
Handshake
no reply
launch to tools/list, stdio
Undocumented tools
0
description under 20 chars · avg 0

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.