Memlab MCP Server

@memlab/mcp-server npm v2.86.0

Published by @memlab — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.

MCP server for MemLab heap snapshot analysis — gives AI coding assistants tools to explore JavaScript heap snapshots, find memory leaks, and identify optimization opportunities

Trust grade
A
93/100
Last scanned get badge →
Trust
A · 93/100
Adoption risk for you: the threat score, then adjusted down for blast radius, publisher verification and how much the scan could see. Deterministic; every point is auditable.
Capability
High
Blast radius if it went rogue — what the server’s tools could reach. Independent of trust.
Coverage
Source
How much the scan could actually inspect. Shallow coverage is stated, never hidden.
Share this Trust Score
𝕏 Share LinkedIn Reddit
A Why this grade threat 100 − adoption risk = 93/100

The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.

1. Threat score — 100 − 0 = 100. What the published surface and source actually contain:

The deterministic scan raised no scored threat in the surface it inspected — the threat score stayed at 100. Capability observations and advisory notes are recorded but never lower it.

2. Client adoption risk — 100 − 7 = 93. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:

PointsAdoption-risk factor
−6 capability blast radius (high) — client exposure if the model is manipulated
−1 publisher verification (public source) — no provenance, but the source is public and inspectable

Capability observations and info notes are shown under Findings but never scored. Open any row's finding below for the file, line and evidence behind a deduction.

Findings 8

high Tool "memlab_eval_across" exposes command/code executionMTC-CAP-001

Tool "memlab_eval_across" appears to run shell commands or evaluate code (keyword "eval" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool memlab_eval_across

high Tool "memlab_eval" exposes command/code executionMTC-CAP-001

Tool "memlab_eval" appears to run shell commands or evaluate code (keyword "eval" in tool name). Arbitrary execution driven by model input is one of the most dangerous MCP capabilities; combined with any untrusted input it becomes RCE.

Fix: Sandbox execution, allowlist commands/arguments, and never pass model output to a shell unescaped.

Location: tool memlab_eval

high Dynamic code execution in server code (dist/tools/eval.js)MTC-SRC-001

In the server's implementation (`dist/tools/eval.js:2580`): Evaluating strings as code is the most direct RCE primitive; if any tool input reaches it, the server executes attacker-chosen code. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: ined_size` THROW inside eval (they read back ~0 on some loads). Use `helpers.retainedSize(id)` / `helpers.retainedSizes(

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/tools/eval.js

high Dynamic code execution in server code (dist/tools/hypothesis.js)MTC-SRC-001

In the server's implementation (`dist/tools/hypothesis.js:106`): Evaluating strings as code is the most direct RCE primitive; if any tool input reaches it, the server executes attacker-chosen code. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: tests.push(vm.runInNewContext(`(function(node){ return !!(${spec.predicate}); })`, Object.create(null), { t

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/tools/hypothesis.js

high Shell/command execution in server code (bin/memlab-cli.js)MTC-SRC-002

In the server's implementation (`bin/memlab-cli.js:36`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: / import {spawn} from 'child_process'; import fs from 'fs'; import path from 'path'; import {fileURLToPath} from 'url';

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server bin/memlab-cli.js

high Shell/command execution in server code (dist/tools/load-snapshot.js)MTC-SRC-002

In the server's implementation (`dist/tools/load-snapshot.js:14`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: { execFileSync } from 'child_process'; import { z } from 'zod'; import memlabCore from '@memlab/core'; import memlabHea

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/tools/load-snapshot.js

low Mutating tool "memlab_eval_across" declares no destructiveHintMTC-CAP-005

Tool "memlab_eval_across" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool memlab_eval_across

low Mutating tool "memlab_eval" declares no destructiveHintMTC-CAP-005

Tool "memlab_eval" can mutate/egress but declares no destructiveHint. Clients that don't default to spec-safe behavior may not prompt before running it.

Fix: Declare accurate annotations, and gate destructive tools on user confirmation regardless.

Location: tool memlab_eval

Tools 102

Each tool and what it can reach — statically extracted from the published source.

  • memlab_evalruns code / shell
  • memlab_eval_acrossruns code / shell
  • memlab_aggregateno sensitive capability
  • memlab_analyze_runno sensitive capability
  • memlab_anonymize_snapshotno sensitive capability
  • memlab_app_configno sensitive capability
  • memlab_app_heapno sensitive capability
  • memlab_array_group_byno sensitive capability
  • memlab_artifact_budgetno sensitive capability
  • memlab_async_censusno sensitive capability
Show 92 more tools ↓
  • memlab_auto_investigateno sensitive capability
  • memlab_batchno sensitive capability
  • memlab_cache_analysisno sensitive capability
  • memlab_census_diffno sensitive capability
  • memlab_chain_walkno sensitive capability
  • memlab_check_healthno sensitive capability
  • memlab_class_histogramno sensitive capability
  • memlab_closure_inspectionno sensitive capability
  • memlab_collection_diffno sensitive capability
  • memlab_collection_trendno sensitive capability
  • memlab_detached_domno sensitive capability
  • memlab_dev_artifactsno sensitive capability
  • memlab_diff_snapshotsno sensitive capability
  • memlab_dom_auditno sensitive capability
  • memlab_dominator_attributionno sensitive capability
  • memlab_dominator_chainno sensitive capability
  • memlab_dominator_subtreeno sensitive capability
  • memlab_duplicate_objectsno sensitive capability
  • memlab_duplicated_stringsno sensitive capability
  • memlab_event_listener_leaksno sensitive capability
  • memlab_event_registryno sensitive capability
  • memlab_explain_deltano sensitive capability
  • memlab_find_by_propertyno sensitive capability
  • memlab_find_by_shapeno sensitive capability
  • memlab_find_nodes_by_classno sensitive capability
  • memlab_finding_indexno sensitive capability
  • memlab_for_eachno sensitive capability
  • memlab_get_nodeno sensitive capability
  • memlab_get_propertyno sensitive capability
  • memlab_get_referencesno sensitive capability
  • memlab_get_referrersno sensitive capability
  • memlab_get_stringno sensitive capability
  • memlab_get_valueno sensitive capability
  • memlab_global_variablesno sensitive capability
  • memlab_growth_signalsno sensitive capability
  • memlab_hunt_reportno sensitive capability
  • memlab_hypothesisno sensitive capability
  • memlab_id_space_auditno sensitive capability
  • memlab_identifyno sensitive capability
  • memlab_identity_diffno sensitive capability
  • memlab_intern_opportunitiesno sensitive capability
  • memlab_ladderno sensitive capability
  • memlab_ladder_probeno sensitive capability
  • memlab_largest_objectsno sensitive capability
  • memlab_leak_reportno sensitive capability
  • memlab_load_snapshotno sensitive capability
  • memlab_map_entriesno sensitive capability
  • memlab_match_objectno sensitive capability
  • memlab_metricno sensitive capability
  • memlab_module_attributionno sensitive capability
  • memlab_next_measurementno sensitive capability
  • memlab_object_cost_breakdownno sensitive capability
  • memlab_object_shapeno sensitive capability
  • memlab_pinch_pointsno sensitive capability
  • memlab_population_diffno sensitive capability
  • memlab_population_vs_ownersno sensitive capability
  • memlab_property_distributionno sensitive capability
  • memlab_property_namesno sensitive capability
  • memlab_quick_diagnosisno sensitive capability
  • memlab_react_ownersno sensitive capability
  • memlab_react_update_queuesno sensitive capability
  • memlab_referrer_summaryno sensitive capability
  • memlab_replicateno sensitive capability
  • memlab_reportsno sensitive capability
  • memlab_retainer_diffno sensitive capability
  • memlab_retainer_layersno sensitive capability
  • memlab_retainer_summaryno sensitive capability
  • memlab_retainer_traceno sensitive capability
  • memlab_round_auditno sensitive capability
  • memlab_round_digestno sensitive capability
  • memlab_script_censusno sensitive capability
  • memlab_search_nodesno sensitive capability
  • memlab_search_stringsno sensitive capability
  • memlab_sequence_analysisno sensitive capability
  • memlab_server_statusno sensitive capability
  • memlab_settle_checkno sensitive capability
  • memlab_shape_histogramno sensitive capability
  • memlab_sliced_stringsno sensitive capability
  • memlab_snapshot_headerno sensitive capability
  • memlab_snapshot_summaryno sensitive capability
  • memlab_snapshotsno sensitive capability
  • memlab_sparse_elementsno sensitive capability
  • memlab_stale_collectionsno sensitive capability
  • memlab_string_patternsno sensitive capability
  • memlab_toolsno sensitive capability
  • memlab_trace_allno sensitive capability
  • memlab_trace_dominatorsno sensitive capability
  • memlab_unit_costno sensitive capability
  • memlab_verify_fixno sensitive capability
  • memlab_weakmap_entriesno sensitive capability
  • memlab_weakref_censusno sensitive capability
  • memlab_what_ifno sensitive capability

What this scan could not see

Versions 3

Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.

VersionScoreFindingsEngineScanned
v2.86.0 latest A 93/100 8 1.13.0 2026-09-07
v2.52.0 A 93/100 6 1.13.0 2026-08-29
v2.18.1 A 93/100 4 1.12.1 2026-08-18

Embed this score

Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.

MCP Trust Score: A · 93/100
Markdown (GitHub README)
[![MCP Trust Score](https://mcptrustchecker.com/registry/memlab-mcp-server/badge.svg)](https://mcptrustchecker.com/registry/memlab-mcp-server)
HTML
<a href="https://mcptrustchecker.com/registry/memlab-mcp-server"><img src="https://mcptrustchecker.com/registry/memlab-mcp-server/badge.svg" alt="MCP Trust Score" height="20"></a>
Prefer shields.io styling? Point it at https://mcptrustchecker.com/registry/memlab-mcp-server/badge.json via https://img.shields.io/endpoint?url=…

Verify this score yourself

The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.

npx mcptrustchecker scan @memlab/mcp-server --online

Use the free API → How scoring works

More in AI, Memory & Reasoning