Atlas / MCP servers / echelongraph / echelongraph-mcp

echelongraph-mcpCAUTION

mcp/echelongraph/echelongraph-mcp

MCP server for CVE intelligence: 16 read-only tools for CVE records, CISA KEV, EPSS history, exploits, fix guidance as sources state it, version, SBOM and lockfile checks, vendor advisories, and per-CVE exposure from Shodan data (© Shodan). Free and keyless.

Verdict
CAUTION
Grade
B
Trust score
84 /100
Exposed tools
13 13r · 0w · 0d
Transport
stdio · streamable-http
License
MIT
Stars
2
01

Overview

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

CVE and internet-exposure data for Claude, Cursor, VS Code, Cline, and any MCP client, straight from EchelonGraph's free public feed.

It exposes EchelonGraph's CVE Pulse (NVD + MITRE-CNA pre-NVD + CISA-KEV + EPSS + GitHub GHSA, fused into one score) plus a per-CVE internet-exposure footprint: how many internet-facing services (distinct ip:port) EchelonGraph's KEV-exposure radar has on record running a version that maps to the CVE. Exposure counts are derived from Shodan data. Shodan data is owned by Shodan, which holds its copyright (© Shodan).

Its 16 tools look up one CVE (record, exploit code and fixed versions, how it is fixed as its sources state it, EPSS history, vendor advisories, exposure footprint), list CISA's newest KEV additions, check whether a product or package version is affected, check an SBOM or a project's lockfiles, and read a CWE and its CVEs. Every result says how it was measured (state, measured_at, method, coverage, freshness, notes), so a model cannot mistake an outage or an unassessed lookup for an all-clear.

It also serves five prompts, ready-made workflows a client can show as slash commands (triage_cve, kev_weekly_brief, am_i_affected, sbom_review, workload_triage; see "Prompts"), and three resources (echelongraph://methodology, echelongraph://sources and cve://{cve_id}; see "Resources").

Free and keyless: no API key, no auth, read-only. The server makes no request other than the API call a tool needs to answer.

Registry: io.echelongraph/echelongraph-mcp · Docs:

  • Source: · Changes:

CHANGELOG.md · Security: SECURITY.md

  • Also listed on: [Smithery](https://smithery.ai/servers/echelongraph/echelongra
Read from source at commit d13864d5bf96OBSERVED · 2026-10-11
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. Replace the environment placeholders with a token scoped to the least it needs.

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

Exposed tools (13)

13 read · 0 write · 0 destructive.

ToolRiskDescription
cve_exposureread
cve_intelread
cve_summaryread
dummy_toolreadd
exposure_radarread
fillerreadx
get_cveread
get_cweread
get_vendor_advisoryread
kev_recentread
search_cvesread
search_vendor_advisoriesread
vendor_advisories_for_cveread
04

Trust audit

CAUTIONgrade B · trust 84/100 Install with care. The audit found things worth knowing before you trust its output.

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

What the source does

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

Findings (17)

MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
listings/mcpb/check-bundle.mjs:167
const env = { PATH: process.env.PATH ?? "", HOME: cwd, ECHELONGRAPH_API_BASE: "http://127.0.0.1:9" };
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
synthetic/forwarder.mjs:76
base: `http://127.0.0.1:${server.address().port}`,
MEDIUMHard-coded secrets · secret.generic · CWE-798, CWE-321
test/http.test.mjs:37
const TOKEN = "forward-token-for-tests-2316";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
listings/mcpb/check-bundle.mjs:37
import { StdioMcpClient, MODERN } from "../../test/mcp-stdio-client.mjs";
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/cve_intel.test.mjs:568
for (const bad of ["", "XSS", "CWE-", "CWE-79a", "79/../../cves"]) {
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/mcpb-release.test.mjs:422
["a symlink in node_modules/", (d) => fs.symlinkSync("../../dist/index.js", path.join(d, "node_modules", "zod", "link.js")),
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
test/vendor-advisories.test.mjs:300
for (const cve_id of ["", "  ", "exchange server", "CVE-24-1", "CVE-2024-1234/../../x"]) {
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
synthetic/run.test.mjs:196
base: `http://127.0.0.1:${server.address().port}`,
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
synthetic/run.test.mjs:605
const dead = await startForwarder({ upstream: "http://127.0.0.1:1", token: UA_TOKEN });
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
synthetic/run.test.mjs:668
url: `http://127.0.0.1:${port}/mcp`,
LOWObfuscation / stealth · obf.rtl_override · CWE-506, CWE-94
test/description-policy.test.mjs:32
const HIDDEN = /[----\u0000-\u0008\u000B-\u001F\u007F-\u009F]/u;
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
test/description-policy.test.mjs:32
const HIDDEN = /[----\u0000-\u0008\u000B-\u001F\u007F-\u009F]/u;
LOWObfuscation / stealth · obf.zero_width · CWE-506, CWE-94
test/description-policy.test.mjs:107
assert.ok(bad("A zerowidth space.").length > 0);
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@types/node, typescript
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
test/fixtures/manifests/requirements.txt
django-filter, celery, numpy, https://files.example.invalid/pkg/simplejson-3.19.1.tar.gz, ./vendor/localpkg, flask
Why it matters. 6 requirement(s) not pinned with ==
Fix. pin exact versions
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
listings/README.md:492
No test account exists, and none is needed: the server is keyless and read-only, so there are no credentials to give. Connect https://mcp.echelongraph.io/mcp with no authentication and call each tool,
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
listings/README.md:492
No test account exists, and none is needed: the server is keyless and read-only, so there are no credentials to give. Connect https://mcp.echelongraph.io/mcp with no authentication and call each tool,
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha d13864d5bf96full audit observations/trust-audit/mcp-server/echelongraph__echelongraph-mcp.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-11d13864d5bf96CAUTIONB84first audit
06

Questions

What is the echelongraph-mcp MCP server?

MCP server for CVE intelligence: 16 read-only tools for CVE records, CISA KEV, EPSS history, exploits, fix guidance as sources state it, version, SBOM and lockfile checks, vendor advisories, and per-CVE exposure from Shodan data (© Shodan). Free and keyless.

What tools does echelongraph-mcp expose?

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

Is echelongraph-mcp safe to connect to an agent?

With care. The audit graded it B (84/100) and found 17 things worth knowing before you trust this server, listed below with the exact line each was found on.

What credentials does echelongraph-mcp need?

It reads ECHELONGRAPH_FORWARD_TOKEN and MCP_REQUIRE_FORWARD_TOKEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does echelongraph-mcp run?

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

How current is this page?

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

Advertisement