MCP server security scanner — static analysis for Model Context Protocol implementations
Drift inferred · capture-to-capture
- HIGH code analysis flagged committed secret ×3, dynamic code execution ×13 in @kernlang/review-mcp
transport stdio · streamable-http · http · sse counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
no tools enumerated yet for this server.
evidence-backed
findings quoted directly from the published source artifact — not inferred
filesystem 13
- fs package/dist/badge.js :4
import * as fs from 'fs'; - fs package/dist/cli.js :2
import * as fs from 'fs'; - fs package/dist/config-scan.js :7
import { existsSync, readFileSync } from 'fs'; - fs package/dist/rule-compiler.js :9
import { readdirSync, readFileSync } from 'fs'; - fs package/dist/tool-pin.js :9
import * as fs from 'fs'; - fs package/dist/workspace-scan.js :4
import * as fs from 'fs'; - fs package/scripts/compile-rules.mjs :9
import { readFileSync, writeFileSync, readdirSync } from 'fs'; - fs package/src/badge.ts :5
import * as fs from 'fs'; - fs package/src/cli.ts :3
import * as fs from 'fs'; - fs package/src/config-scan.ts :8
import { existsSync, readFileSync } from 'fs'; - fs package/src/rule-compiler.ts :11
import { readdirSync, readFileSync } from 'fs'; - fs package/src/tool-pin.ts :10
import * as fs from 'fs'; - fs package/src/workspace-scan.ts :7
import * as fs from 'fs';
shell / exec 10
- shell package/dist/infer-mcp.js :23
const SHELL_EXEC_PATTERN = /\b(exec|execSync|execFile|execFileSync|spawn|spawnSync|child_process)\b/; - shell package/dist/rules/checks/mcp01-cmd-injection.js :83
findings.push(finding('mcp-command-injection', 'error', `eval()/exec() in MCP tool handler — arbitrary code execution risk`, filePath, i + 1, 'Never use eval/exec with user-supplied input. Use ast.lit - shell package/dist/rules/checks/mcp11-excessive-permissions.js :21
: /\b(execSync|execFile|spawn|spawnSync|child_process)/; - shell package/dist/rules/mcp-patterns.js :10
export const TS_EXEC_SINKS = /\b(exec|execSync|execFile|execFileSync|spawn|spawnSync|child_process)\s*\(|\beval\s*\(|\bnew\s+Function\s*\(/; - shell package/dist/server-inspector.js :14
import { spawn } from 'child_process'; - shell package/src/infer-mcp.ts :28
const SHELL_EXEC_PATTERN = /\b(exec|execSync|execFile|execFileSync|spawn|spawnSync|child_process)\b/; - shell package/src/rules/checks/mcp01-cmd-injection.ts :148
`eval()/exec() in MCP tool handler — arbitrary code execution risk`, - shell package/src/rules/checks/mcp11-excessive-permissions.ts :25
: /\b(execSync|execFile|spawn|spawnSync|child_process)/; - shell package/src/rules/mcp-patterns.ts :13
/\b(exec|execSync|execFile|execFileSync|spawn|spawnSync|child_process)\s*\(|\beval\s*\(|\bnew\s+Function\s*\(/; - shell package/src/server-inspector.ts :15
import { type ChildProcess, spawn } from 'child_process';
network 4
- net package/dist/rule-runner.js :76
// fetch(target); → tainted var reaches sink - net package/dist/rules/checks/mcp12-resource-exhaustion.js :31
findings.push(finding('mcp-resource-exhaustion', 'warning', 'fetch() without AbortController or timeout — can block MCP server indefinitely', filePath, startLine, 'Use AbortController with setTimeout: - net package/src/rule-runner.ts :83
// fetch(target); → tainted var reaches sink - net package/src/rules/checks/mcp12-resource-exhaustion.ts :61
'fetch() without AbortController or timeout — can block MCP server indefinitely',
tool registrations 14
- name package/dist/infer-mcp.js :77
- name package/dist/infer-mcp.js :89
- name package/dist/rule-runner.js :21
- name package/dist/rule-runner.js :21
- name package/dist/rule-runner.js :22
- name package/dist/rules/checks/mcp03-tool-poisoning.js :11
- name package/dist/rules/mcp-regions.js :11
- name package/src/infer-mcp.ts :103
- name package/src/infer-mcp.ts :117
- name package/src/rule-runner.ts :26
- name package/src/rule-runner.ts :26
- name package/src/rule-runner.ts :27
- name package/src/rules/checks/mcp03-tool-poisoning.ts :15
- name package/src/rules/mcp-regions.ts :21
declared dependencies 3
- ts-morph@^28.0.0
- @kernlang/core@4.0.0
- @kernlang/review@4.0.0