Atlas / MCP servers / cdump / evmole

evmoleBLOCK

mcp/cdump/evmole

EVMole is an open-source library that analyzes deployed EVM bytecode to infer function selectors, argument types, state mutability, persistent and transient storage layout, control flow, and compiler metadata, including for unverified contracts

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
1 1r · 0w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
467
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://evmole.xyz/) [](https://www.npmjs.com/package/evmole) [](https://crates.io/crates/evmole) [](https://pypi.org/project/evmole) [](https://pkg.go.dev/github.com/cdump/evmole/go)

EVMole is a powerful library that extracts information from Ethereum Virtual Machine (EVM) bytecode, including function selectors, arguments, state mutability, persistent and transient storage layouts, and CBOR metadata, even for unverified contracts.

Key Features

  • Multi-language support: Available as JavaScript, Rust, Python, and Go libraries.
  • High accuracy and performance: Outperforms existing tools.
  • Broad compatibility: Tested with both Solidity and Vyper compiled contracts.
  • Lightweight: Clean codebase with minimal external dependencies.
  • Unverified contract analysis: Extracts information even from unverified bytecode.
  • Selector dispatch classification: Distinguishes normal ABI dispatch from selectors handled by fallback logic.
  • CBOR metadata: Extracts string-keyed values from a terminal, length-suffixed CBOR map without assuming a particular compiler.

Usage

JavaScript

API documentation and usage examples (Node.js, Vite, webpack, Parcel, esbuild)

npm i evmole
import { contractInfo } from 'evmole'

const code = '0x6080604052348015600e575f80fd5b50600436106030575f3560e01c80632125b65b146034578063b69ef8a8146044575b5f80fd5b6044603f3660046046565b505050565b005b5f805f60608
Read from source at commit 23199f921dbaOBSERVED · 2026-10-10
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.

claude-code (npm)
claude mcp add evmole-mcp -- npx -y [email protected]
03

Exposed tools (1)

1 read · 0 write · 0 destructive.

ToolRiskDescription
analyze_evm_bytecoderead
04

Trust audit

BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (4 observation(s))
Network
none-observed
Shell
declared (1 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (19)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/control_flow_graph/state.rs:123
pub fn exec(&mut self, code: &[u8], start: usize, end: Option<usize>) -> Option<StackSym> {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitmodules
.gitmodules
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
agent/mcp/tests/package_smoke.test.mjs:12
const javascriptRoot = resolve(mcpRoot, "../../javascript");
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
agent/mcp/tests/protocol.test.mjs:12
new URL("../../../javascript/dist/evmole_cli.mjs", import.meta.url),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
agent/mcp/tests/protocol.test.mjs:16
new URL(`../../tests/fixtures/${name}`, import.meta.url),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
agent/mcp/tests/run-local-server.mjs:6
} from "../../../javascript/dist/agent_api.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
agent/mcp/tests/server.test.mjs:10
} from "../../../javascript/dist/agent_api.mjs";
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
README.md:31
const code = '0x6080604052348015600e575f80fd5b50600436106030575f3560e01c80632125b65b146034578063b69ef8a8146044575b5f80fd5b6044603f3660046046565b505050565b005b5f805f606084860312156057575f80fd5b833563ff
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
README.md:49
let code = hex::decode("6080604052348015600e575f80fd5b50600436106030575f3560e01c80632125b65b146034578063b69ef8a8146044575b5f80fd5b6044603f3660046046565b505050565b005b5f805f606084860312156057575f80fd5b
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
README.md:78
code = '0x6080604052348015600e575f80fd5b50600436106030575f3560e01c80632125b65b146034578063b69ef8a8146044575b5f80fd5b6044603f3660046046565b505050565b005b5f805f606084860312156057575f80fd5b833563ffffffff
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
README.md:109
code, _ := hex.DecodeString("6080604052348015600e575f80fd5b50600436106030575f3560e01c80632125b65b146034578063b69ef8a8146044575b5f80fd5b6044603f3660046046565b505050565b005b5f805f606084860312156057575f8
LOWObfuscation / stealth · obf.base64_blob · CWE-506, CWE-94
go/evmole_test.go:12
const testCodeHex = "6080604052348015600e575f80fd5b50600436106026575f3560e01c8063fae7ab8214602a575b5f80fd5b603960353660046062565b6052565b60405163ffffffff909116815260200160405180910390f35b5f605c8260016
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
python/test_python.py:38
metadata_code = bytes.fromhex('6000a164736f6c634300081a000a')
LOWObfuscation / stealth · obf.decode_call · CWE-506, CWE-94
python/test_python.py:48
assert info.metadata.entries[0].value.value == bytes.fromhex('00081a')
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
javascript/examples/parcel/package.json
parcel
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
javascript/examples/parcel_packageExports/package.json
parcel
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
javascript/examples/vite/package.json
vite
Why it matters. 1 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
javascript/examples/webpack/package.json
html-webpack-plugin, webpack, webpack-cli
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
javascript/package.json
jsdoc-to-markdown, rollup, typescript, wasm-pack, ajv
Why it matters. 5 dependency range(s) float
Fix. pin exact versions or ship a lockfile

Gates applied: no_behavioural_pass.

Audited 2026-10-10 · audit v0.4.1 · source sha 23199f921dbafull audit observations/trust-audit/mcp-server/cdump__evmole.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1023199f921dbaBLOCKD69first audit
06

Questions

What is the evmole MCP server?

EVMole is an open-source library that analyzes deployed EVM bytecode to infer function selectors, argument types, state mutability, persistent and transient storage layout, control flow, and compiler metadata, including for unverified contracts

What tools does evmole expose?

1 in total: 1 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.

Is evmole safe to connect to an agent?

No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.

What credentials does evmole need?

No credential environment variables were found in its source, so it appears to need none.

How does evmole run?

It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as examples-tests at 0.0.1.

How current is this page?

The grade is for one exact copy of the source (23199f921dba), read on 2026-10-10. The repository is watched and re-audited when it changes.

Advertisement