{
 "title": "MCP Server Security Prevalence Dataset (2026)",
 "generated": "2026-08-08",
 "publisher": "WOWHOW (wowhow.cloud)",
 "license": "CC BY 4.0",
 "method": "Read-only static analysis of the tool-handler code of public open-source MCP servers via the GitHub API, against a fixed 6-class rubric (command injection, path traversal, unauthenticated tool exposure, SSRF, secret leakage, missing input validation). Every high-severity finding independently re-verified against live code (adversarial pass). Servers are anonymized (S01-S23); this dataset reports prevalence, not named vulnerabilities. Non-servers (outbound clients/adapters/libraries) excluded from denominators.",
 "sampleScanned": 26,
 "applicableServers": 23,
 "excludedNonServers": 3,
 "serversWithFinding": 14,
 "prevalencePct": 61,
 "byClass": {
  "unauth_tool_exposure": {
   "servers": 7,
   "pct": 30
  },
  "path_traversal": {
   "servers": 6,
   "pct": 26
  },
  "missing_input_validation": {
   "servers": 5,
   "pct": 22
  },
  "ssrf": {
   "servers": 4,
   "pct": 17
  },
  "secret_leakage": {
   "servers": 2,
   "pct": 9
  }
 },
 "bySeverity": {
  "medium": 14,
  "high": 13,
  "low": 3
 },
 "servers": [
  {
   "id": "S01",
   "lang": "TypeScript",
   "starTier": "high (8k+★)",
   "findings": []
  },
  {
   "id": "S02",
   "lang": "TypeScript",
   "starTier": "high (8k+★)",
   "findings": [
    {
     "class": "powerful_tool_by_design",
     "severity": "high",
     "byDesign": true
    },
    {
     "class": "unauth_tool_exposure",
     "severity": "medium"
    },
    {
     "class": "ssrf",
     "severity": "medium"
    }
   ]
  },
  {
   "id": "S03",
   "lang": "Go",
   "starTier": "high (8k+★)",
   "findings": []
  },
  {
   "id": "S04",
   "lang": "Python",
   "starTier": "high (8k+★)",
   "findings": [
    {
     "class": "path_traversal",
     "severity": "high"
    },
    {
     "class": "missing_input_validation",
     "severity": "medium"
    }
   ]
  },
  {
   "id": "S05",
   "lang": "TypeScript",
   "starTier": "high (8k+★)",
   "findings": [
    {
     "class": "ssrf",
     "severity": "high"
    },
    {
     "class": "secret_leakage",
     "severity": "high"
    }
   ]
  },
  {
   "id": "S06",
   "lang": "TypeScript",
   "starTier": "high (8k+★)",
   "findings": []
  },
  {
   "id": "S07",
   "lang": "Python",
   "starTier": "high (8k+★)",
   "findings": [
    {
     "class": "path_traversal",
     "severity": "medium"
    }
   ]
  },
  {
   "id": "S08",
   "lang": "TypeScript",
   "starTier": "mid (1.5k-8k★)",
   "findings": [
    {
     "class": "unauth_tool_exposure",
     "severity": "high"
    },
    {
     "class": "path_traversal",
     "severity": "high"
    }
   ]
  },
  {
   "id": "S09",
   "lang": "TypeScript",
   "starTier": "mid (1.5k-8k★)",
   "findings": []
  },
  {
   "id": "S10",
   "lang": "TypeScript",
   "starTier": "mid (1.5k-8k★)",
   "findings": [
    {
     "class": "unauth_tool_exposure",
     "severity": "high"
    }
   ]
  },
  {
   "id": "S11",
   "lang": "Python",
   "starTier": "mid (1.5k-8k★)",
   "findings": []
  },
  {
   "id": "S12",
   "lang": "TypeScript",
   "starTier": "mid (1.5k-8k★)",
   "findings": []
  },
  {
   "id": "S13",
   "lang": "Go/Python",
   "starTier": "mid (1.5k-8k★)",
   "findings": [
    {
     "class": "unauth_tool_exposure",
     "severity": "high"
    },
    {
     "class": "path_traversal",
     "severity": "high"
    }
   ]
  },
  {
   "id": "S14",
   "lang": "TypeScript",
   "starTier": "mid (1.5k-8k★)",
   "findings": []
  },
  {
   "id": "S15",
   "lang": "TypeScript",
   "starTier": "mid (1.5k-8k★)",
   "findings": [
    {
     "class": "unauth_tool_exposure",
     "severity": "medium"
    }
   ]
  },
  {
   "id": "S16",
   "lang": "Go",
   "starTier": "mid (1.5k-8k★)",
   "findings": []
  },
  {
   "id": "S17",
   "lang": "Python",
   "starTier": "long-tail (<1.5k★)",
   "findings": [
    {
     "class": "ssrf",
     "severity": "high"
    },
    {
     "class": "ssrf",
     "severity": "medium"
    },
    {
     "class": "ssrf",
     "severity": "medium"
    },
    {
     "class": "path_traversal",
     "severity": "high"
    },
    {
     "class": "path_traversal",
     "severity": "medium"
    },
    {
     "class": "path_traversal",
     "severity": "medium"
    },
    {
     "class": "path_traversal",
     "severity": "medium"
    },
    {
     "class": "unauth_tool_exposure",
     "severity": "high"
    },
    {
     "class": "missing_input_validation",
     "severity": "medium"
    }
   ]
  },
  {
   "id": "S18",
   "lang": "Python",
   "starTier": "long-tail (<1.5k★)",
   "findings": [
    {
     "class": "path_traversal",
     "severity": "low"
    }
   ]
  },
  {
   "id": "S19",
   "lang": "Go",
   "starTier": "long-tail (<1.5k★)",
   "findings": [
    {
     "class": "missing_input_validation",
     "severity": "medium"
    },
    {
     "class": "missing_input_validation",
     "severity": "low"
    }
   ]
  },
  {
   "id": "S20",
   "lang": "Python",
   "starTier": "long-tail (<1.5k★)",
   "findings": [
    {
     "class": "missing_input_validation",
     "severity": "low"
    }
   ]
  },
  {
   "id": "S21",
   "lang": "Python",
   "starTier": "long-tail (<1.5k★)",
   "findings": []
  },
  {
   "id": "S22",
   "lang": "Python",
   "starTier": "long-tail (<1.5k★)",
   "findings": [
    {
     "class": "unauth_tool_exposure",
     "severity": "high"
    },
    {
     "class": "missing_input_validation",
     "severity": "high"
    },
    {
     "class": "ssrf",
     "severity": "medium"
    }
   ]
  },
  {
   "id": "S23",
   "lang": "TypeScript",
   "starTier": "long-tail (<1.5k★)",
   "findings": [
    {
     "class": "secret_leakage",
     "severity": "medium"
    }
   ]
  }
 ]
}