mcp-server@0.2.44
CAUTION· startup onlyPublisher claims: "MCP server exposing Almanak platform API as tools" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Startup only; authenticated tool behavior not tested.- Tested
- server startup over stdio (initialize sent) · every file read, file written and host contacted by what ran
- Not tested
- the tool list (the server exited before answering) · what the tools do when called with real credentials
What this means for the label: Caution 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
Code inventory arrives with this version's next honeypot run.- It will ask for
- unknown until the next run
- Where it talks to
- unknown until the next run
- What the honeypot saw
- no credential files read · no network
- What we could not test
- the tool list (the server exited before answering) · what the tools do when called with real credentials
Not enough was observed to say yet. Startup only; authenticated tool behavior not tested. This version's code has not been inventoried for credentials and hosts either; both arrive with its next honeypot run (popular servers first). `vet-skills try mcp-server` runs it now and prints the full answer.
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; startup only; authenticated tool behavior not tested) on 2026-11-07 and scored it 78/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
'.env',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'.env.*',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.(0, node_test_1.test)('a budget kill alone has no secondary failure', () => {Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.await strict_1.default.rejects((0, runner_1.runTestLadder)({ workspacePath: ws, logPath: '/etc/passwd' }, stubController()), /log_path must be inside workspace_path/);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.// (e.g. ``/etc/passwd``) by passing an absolute path or a ``..``-traversingFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.* (EXPORT_SKIP_DIRS / EXPORT_SKIP_FILE_BASENAMES / .env allowlist) — the sameFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'Session-internal files (.almanak, .almanakdb, almanak_state.db*, .env, .venv, node_modules, .logs) are excluded automatically. ' +Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose....env,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'.env',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.'!.env.example',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.(0, node_test_1.test)('a strategy failure before a budget kill stays primary; the kill is secondary', () => {Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.'!.env.sample',Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.strict_1.default.equal((0, agent_v3_1.safeLogFileName)('../../etc/passwd'), '_.._etc_passwd');Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.const client = new client_1.PlatformClient({ baseUrl: 'http://203.0.113.1', token: 'secret', timeout: 1000 });Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.const client = new client_1.PlatformClient({ baseUrl: 'http://203.0.113.1', token: 'secret', timeout: 1000 });Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.// (kill pod, leave positions) / restartAgent for the equivalent flows.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell./** The sidecar's draw budget (30 s) and kill grace (5 s), with room for the response. */Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.const stop = kill !== null && kill !== void 0 ? kill : failures.find(isKill);Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.description: "Show the user an editable Strategy Spec panel to review and approve the strategy's risk posture BEFORE building. Call early — after confirming protocol support, before scaffolding. Pass Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.description: 'The tokens the strategy will hold. Each item: { symbol, address, chain_id, decimals? }. chain_id is for widget pricing/display, not config.json output.',Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.description: 'Ask the user how much (in USD) they want to allocate per token when funding a new strategy. Call this once at the very start of strategy creation, after you have determined which tokens Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.const kill = timedOutMessage !== null ? budgetExhausted(timedOutMessage) : null;Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.// settle): the client must still be waiting, or a budget kill reads as a transport failure.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.// The earliest failure of the strategy's own run stays primary; a budget kill or interruptFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell./** The sidecar's draw budget (30 s) and kill grace (5 s), with room for the response. */Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.await strict_1.default.rejects((0, runner_1.runTestLadder)({ workspacePath: ws, logPath: '../../etc/passwd' }, stubController()), /log_path must be inside workspace_path/);Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.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
No advisories in OSV for @almanak/mcp-server@0.2.44 as of 7d ago. This is the package itself, not its dependencies.
What would make this Verified
2 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim almanak: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Process kill command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- URL using raw IP address≈ +2 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- Outbound HTTP to raw IP address≈ +2 on the totalReplace encoded or assembled strings with plain literals and remove undeclared network calls.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.