by andrasfe
A Python-based MCP server that provides real-time security advice about Python modules by querying multiple authoritative vulnerability databases.
VulniCheck is a Python-based MCP server designed to provide real-time security advice for Python modules. It achieves this by querying a comprehensive set of authoritative vulnerability databases, including OSV.dev, NVD, GitHub Advisory Database, CIRCL Vulnerability-Lookup, and Safety DB. Beyond dependency vulnerability scanning, VulniCheck offers advanced features such as Docker analysis, secrets detection, MCP configuration validation, and LLM-powered risk assessment for interactive security audits. It provides detailed CVE information, CVSS scores, and actionable remediation guidance.
VulniCheck can be integrated with MCP-compatible clients like Claude Desktop or Claude Code. The recommended installation method is using uvx
directly from GitHub.
Quick Start with uvx
(Recommended):
# Basic setup
claude mcp add vulnicheck -- uvx --from git+https://github.com/andrasfe/vulnicheck.git vulnicheck
# With environment variables for enhanced features (API keys)
claude mcp add vulnicheck \
-e NVD_API_KEY=your-nvd-key \
-e GITHUB_TOKEN=your-github-token \
-e OPENAI_API_KEY=your-openai-key \
-- uvx --from git+https://github.com/andrasfe/vulnicheck.git vulnicheck
Note: Environment variables like NVD_API_KEY
, GITHUB_TOKEN
, OPENAI_API_KEY
, and ANTHROPIC_API_KEY
are optional but highly recommended for increased API rate limits and AI-powered features.Traditional Installation:
git clone https://github.com/andrasfe/vulnicheck.git
cd vulnicheck
./run-local.sh
(This script handles virtual environment creation, dependency installation, and Claude Desktop configuration).pip install -e .
), and running the server (python -m vulnicheck.server
).Once configured, you can interact with VulniCheck using natural language commands within your IDE, such as:
requirements.txt
, pyproject.toml
, lock files, and even Python import statements.detect-secrets
.https://nvd.nist.gov/developers/request-an-api-key
) and GitHub (https://github.com/settings/tokens
) and configure them via environment variables (NVD_API_KEY
, GITHUB_TOKEN
) or in your .env
file. LLM API keys (OPENAI_API_KEY
, ANTHROPIC_API_KEY
) enable AI-powered features.GITHUB_TOKEN
with appropriate permissions as an environment variable or in your .env
file when scanning private repositories..vulnicheck
directory?
This directory stores conversation logs, local cache, and security audit trails. It's recommended to add .vulnicheck/
to your .gitignore
file."Run a comprehensive security check on my project"
or "Run a comprehensive security check on /path/to/project"
.validate_mcp_security
tool used for?
This tool allows LLMs to perform a self-assessment of their security posture by analyzing their MCP configurations for potential vulnerabilities like prompt injection or tool poisoning.A Python-based MCP (Model Context Protocol) server that provides real-time security advice about Python modules by querying multiple authoritative vulnerability databases including OSV.dev, NVD (National Vulnerability Database), GitHub Advisory Database, CIRCL Vulnerability-Lookup, and Safety DB.
The information provided by this software and accompanying materials (including but not limited to vulnerability data obtained from the NVD, CWE, OSV, and other public sources) is provided "AS IS" and "AS AVAILABLE" without warranty of any kind, either express or implied. The authors, contributors, and distributors of this software expressly disclaim all warranties, including but not limited to the implied warranties of merchantability, fitness for a particular purpose, and non-infringement.
The authors and distributors do not guarantee the accuracy, completeness, timeliness, or reliability of the information provided. Users are solely responsible for verifying and validating the information before relying on it. Under no circumstances shall the authors, contributors, or distributors be liable for any direct, indirect, incidental, consequential, or special damages, including but not limited to loss of data, loss of profits, or business interruption, arising from the use of this software or the information contained herein, even if advised of the possibility of such damages.
By using this software and its associated data, you acknowledge and agree to assume all risks associated with its use.
This software incorporates or references data from publicly available sources, including the National Vulnerability Database (NVD), Common Weakness Enumeration (CWE), and Open Source Vulnerabilities (OSV), which are provided under their respective public licenses and disclaimers.
⚠️ IMPORTANT: Add .vulnicheck
to your .gitignore
file! This directory contains:
echo ".vulnicheck/" >> .gitignore
The easiest way to use VulniCheck is with the comprehensive_security_check tool, which provides an interactive, AI-powered security assessment of your entire project or any GitHub repository:
# For current directory
"Run a comprehensive security check on my project"
# For a specific local path
"Run a comprehensive security check on /path/to/project"
# For a GitHub repository
"Run a comprehensive security check on https://github.com/owner/repo"
This tool will:
Note: Requires OPENAI_API_KEY or ANTHROPIC_API_KEY to be configured.
requirements.txt
, pyproject.toml
, and lock filesRequirements: Python 3.10 or higher
If you have uv
installed (pip install uv
), you can run VulniCheck directly without cloning:
Claude Desktop:
{
"mcpServers": {
"vulnicheck": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/andrasfe/vulnicheck.git",
"vulnicheck"
],
"env": {
"NVD_API_KEY": "your-nvd-api-key",
"GITHUB_TOKEN": "your-github-token",
"OPENAI_API_KEY": "your-openai-key",
"ANTHROPIC_API_KEY": "your-anthropic-key"
}
}
}
}
Claude Code:
# Basic setup
claude mcp add vulnicheck -- uvx --from git+https://github.com/andrasfe/vulnicheck.git vulnicheck
# With environment variables for enhanced features
claude mcp add vulnicheck \
-e NVD_API_KEY=your-nvd-key \
-e GITHUB_TOKEN=your-github-token \
-e OPENAI_API_KEY=your-openai-key \
-- uvx --from git+https://github.com/andrasfe/vulnicheck.git vulnicheck
Note: Environment variables are optional but recommended:
NVD_API_KEY
: Increases rate limit from 5 to 50 requests/30s (get free key)GITHUB_TOKEN
: Increases rate limit to 5000 requests/hour (create token)OPENAI_API_KEY
or ANTHROPIC_API_KEY
: Enables AI-powered risk assessment for MCP passthroughgit clone https://github.com/andrasfe/vulnicheck.git
cd vulnicheck
./run-local.sh
This will automatically:
After setup, restart Claude Code to use VulniCheck.
Claude Desktop:
Add to your Claude MCP settings at ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) or ~/.config/claude/claude_desktop_config.json
(Linux):
{
"mcpServers": {
"vulnicheck": {
"command": "/path/to/vulnicheck/.venv/bin/python",
"args": ["-m", "vulnicheck.server"]
}
}
}
Claude Code:
Use the CLI to add the server:
claude mcp add vulnicheck -- /path/to/vulnicheck/.venv/bin/python -m vulnicheck.server
Or with environment variables:
claude mcp add vulnicheck -e NVD_API_KEY=your_key -e GITHUB_TOKEN=your_token -- /path/to/vulnicheck/.venv/bin/python -m vulnicheck.server
VS Code / Cursor:
With uvx:
{
"mcpServers": {
"vulnicheck": {
"command": "uvx",
"args": [
"--from",
"git+https://github.com/andrasfe/vulnicheck.git",
"vulnicheck"
],
"env": {
"NVD_API_KEY": "your-nvd-api-key",
"GITHUB_TOKEN": "your-github-token"
}
}
}
}
Or traditional setup:
{
"mcpServers": {
"vulnicheck": {
"command": "/path/to/vulnicheck/.venv/bin/python",
"args": ["-m", "vulnicheck.server"]
}
}
}
make install-local
# Create and activate virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install vulnicheck
pip install -e .
# Run the server
python -m vulnicheck.server
# Install globally (not recommended)
pip install .
# Run from anywhere
vulnicheck
Once the service is running and your IDE is configured, you can interact with VulniCheck using natural language:
# Update the installation
git pull
./run-local.sh
# Run the server manually
.venv/bin/python -m vulnicheck.server
# (Press Ctrl+C to stop)
# Run with API keys for enhanced rate limits
NVD_API_KEY=your-key GITHUB_TOKEN=your-token .venv/bin/python -m vulnicheck.server
Check a specific Python package for known vulnerabilities.
Parameters:
package_name
(required): Name of the Python packageversion
(optional): Specific version to checkinclude_details
(optional): Include detailed CVE information from NVDExample:
{
"tool": "check_package_vulnerabilities",
"package_name": "numpy",
"version": "1.19.0",
"include_details": true
}
Scan a requirements file or directory for vulnerabilities in all dependencies.
Parameters:
file_path
(required): Path to requirements.txt, pyproject.toml, or a directoryinclude_details
(optional): Include detailed CVE informationBehavior:
Examples:
{
"tool": "scan_dependencies",
"file_path": "/path/to/requirements.txt",
"include_details": false
}
{
"tool": "scan_dependencies",
"file_path": "/path/to/project/directory",
"include_details": true
}
Scan Python packages for vulnerabilities - either from a provided list or the current environment.
Parameters:
packages
(optional): List of packages with name and version to scanExample:
{
"tool": "scan_installed_packages",
"packages": [
{"name": "django", "version": "3.2.0"},
{"name": "flask", "version": "2.0.1"}
]
}
Note: If packages
is not provided, the tool will scan the MCP server's own environment, which is likely NOT what you want. Always provide the packages list for accurate results.
Get detailed information about a specific CVE or GHSA advisory.
Parameters:
cve_id
(required): CVE identifier (e.g., CVE-2021-12345) or GHSA identifier (e.g., GHSA-1234-5678-9abc)Example:
{
"tool": "get_cve_details",
"cve_id": "CVE-2021-41495"
}
Example with GHSA:
{
"tool": "get_cve_details",
"cve_id": "GHSA-fpfv-jqm9-f5jm"
}
Scan files or directories for exposed secrets and credentials using detect-secrets.
Parameters:
path
(required): File or directory path to scanexclude_patterns
(optional): List of glob patterns to exclude from scanningExample:
{
"tool": "scan_for_secrets",
"path": "/path/to/project",
"exclude_patterns": ["*.log", "build/*"]
}
Validate MCP server security configuration for self-assessment. Allows LLMs to check their own security posture using mcp-scan integration.
Parameters:
agent_name
(required): The coding agent/IDE being used (e.g., 'claude', 'cursor', 'vscode', 'windsurf', 'continue', or 'custom')config_path
(optional): Custom path to MCP configuration file (only needed if agent_name is 'custom' or config is in non-standard location)mode
(optional): 'scan' for full analysis or 'inspect' for quick check (default: 'scan')local_only
(optional): Use local validation only, no external API calls (default: true)Example:
{
"tool": "validate_mcp_security",
"agent_name": "claude",
"mode": "scan",
"local_only": true
}
Note: When running VulniCheck locally, this tool can access your local configuration files (e.g., ~/.claude.json
, ~/.cursor/config.json
). The tool automatically searches standard configuration locations for each agent.
This tool helps LLMs self-validate for:
The validation report includes severity levels (CRITICAL, HIGH, MEDIUM, LOW) and provides guidance on whether to proceed with sensitive operations.
Integration with mcp-scan (Experimental):
VulniCheck integrates with mcp-scan, an experimental security scanner for Model Context Protocol (MCP) configurations. This feature allows LLMs to perform self-assessment of their security posture by analyzing their own MCP server configurations for potential vulnerabilities.
⚠️ Note: The MCP security validation feature is experimental and under active development. It provides an additional layer of security awareness but should not be relied upon as the sole security measure.
Key capabilities:
This self-validation capability enables LLMs to make informed decisions about whether to proceed with sensitive operations based on their current security configuration.
Execute MCP tool calls through a security passthrough layer that validates and monitors cross-server operations. This tool enables secure communication between different MCP servers while enforcing security constraints.
Parameters:
server_name
(required): Name of the target MCP servertool_name
(required): Name of the tool to call on the MCP serverparameters
(optional): Parameters to pass to the tool (default: empty dict)security_context
(optional): Additional security constraints for this calluse_approval
(optional): Enable risk-based approval mechanism (default: false)Example:
{
"tool": "mcp_passthrough_tool",
"server_name": "zen",
"tool_name": "listmodels",
"parameters": {}
}
Security Features:
LLM Risk Assessment (When API Keys Configured):
Risk Categories:
Approval Mechanism:
When use_approval
is true and an operation requires approval:
approve_mcp_operation
or deny_mcp_operation
tools to respondResponse Format:
{
"status": "success|blocked|error|approval_required",
"result": {}, // Only for successful calls
"reason": "...", // For blocked/denied calls
"error": "...", // For errors
"request_id": "...", // For approval requests
"display_message": "...", // For approval requests
"security_prompt": "..." // Always included
}
Logging:
All MCP passthrough interactions are logged to ~/.vulnicheck/logs/mcp_interactions.log
with:
mcp_interactions.log.YYYYMMDD_HHMMSS.log
Approve a pending MCP operation that requires security approval.
Parameters:
request_id
(required): The request ID from the approval requestreason
(required): Justification for approving this operationExample:
{
"tool": "approve_mcp_operation",
"request_id": "abc123",
"reason": "Operation aligns with user intent to analyze project structure"
}
Deny a pending MCP operation that requires security approval.
Parameters:
request_id
(required): The request ID from the approval requestreason
(required): Explanation for denying this operationalternative
(optional): Suggested safer alternative approachExample:
{
"tool": "deny_mcp_operation",
"request_id": "abc123",
"reason": "Operation too risky for current context",
"alternative": "Use read-only operations instead"
}
List available MCP servers and their tools.
Parameters:
agent_name
(optional): The coding assistant/IDE (claude, cursor, vscode, etc.)Example:
{
"tool": "list_mcp_servers"
}
Pre-operation risk assessment tool for evaluating the safety of file operations, command execution, and API calls before performing them.
Parameters:
operation_type
(required): Type of operation (e.g., 'file_write', 'file_delete', 'command_execution', 'api_call')operation_details
(required): Details about the operation as a dictionary
context
(optional): Additional context about why this operation is being performedExample:
{
"tool": "assess_operation_safety",
"operation_type": "file_read",
"operation_details": {"path": "/etc/passwd"},
"context": "User wants to check system users"
}
Response includes:
Risk Assessment Features:
This tool helps LLMs and developers make informed decisions about potentially dangerous operations before executing them, promoting a security-first approach to system interactions.
Analyze Dockerfiles for Python dependencies and check for vulnerabilities.
Parameters:
dockerfile_path
(optional): Absolute path to the Dockerfile to scandockerfile_content
(optional): Content of the Dockerfile as a stringNote: Either dockerfile_path
or dockerfile_content
must be provided.
Example:
{
"tool": "scan_dockerfile",
"dockerfile_path": "/path/to/Dockerfile"
}
Capabilities:
pip install
commands (with version specifiers)poetry add
commandspipenv install
commandsconda install
commandsExample with dockerfile_content:
{
"tool": "scan_dockerfile",
"dockerfile_content": "FROM python:3.9\nRUN pip install requests==2.28.0 flask>=2.0.0\nCOPY requirements.txt .\nRUN pip install -r requirements.txt"
}
Response includes:
Retrieve stored conversations between clients (e.g., Claude) and MCP servers that VulniCheck has intermediated.
Parameters:
client
(optional): Filter by client name (e.g., 'claude', 'cursor')server
(optional): Filter by MCP server name (e.g., 'github', 'zen')query
(optional): Search query to find conversations containing specific tools or parameterslimit
(optional): Maximum number of conversations to return (default: 20, max: 1000)Example:
{
"tool": "get_mcp_conversations",
"server": "github",
"limit": 10
}
Features:
.vulnicheck/conversations
directoryResponse includes:
Use cases:
Scan a GitHub repository for security vulnerabilities by analyzing dependencies, secrets, and Dockerfiles.
Parameters:
repo_url
(required): GitHub repository URL (e.g., https://github.com/owner/repo)scan_types
(optional): Types of scans to perform. Options: 'dependencies', 'secrets', 'dockerfile'. Defaults to all.depth
(optional): Scan depth: 'quick' (fast, minimal checks), 'standard' (balanced), 'deep' (comprehensive). Default: 'standard'auth_token
(optional): GitHub authentication token for private repos. Uses GITHUB_TOKEN env var if not provided.Example:
{
"tool": "scan_github_repo",
"repo_url": "https://github.com/numpy/numpy",
"scan_types": ["dependencies", "secrets"],
"depth": "standard"
}
Supported URL formats:
Features:
Response includes:
Example response summary:
{
"status": "success",
"repository": "https://github.com/owner/repo",
"summary": {
"total_issues": 15,
"critical": 2,
"high": 5,
"medium": 8,
"low": 0,
"scan_types_completed": ["dependencies", "secrets", "dockerfile"]
},
"remediation": {
"immediate": [
"Update vulnerable dependencies to patched versions",
"Rotate all exposed secrets and credentials immediately"
],
"medium_term": [
"Implement automated dependency scanning in CI/CD pipeline"
],
"long_term": [
"Set up automated dependency updates with security patches"
]
}
}
Use cases:
# Python Package Security Report: numpy
Version: 1.19.0
Found 3 vulnerabilities
## Summary
- CRITICAL: 0
- HIGH: 2
- MEDIUM: 1
## Vulnerabilities
### GHSA-fpfv-jqm9-f5jm
**Summary**: NULL Pointer Dereference in NumPy
**Severity**: HIGH
**CVE IDs**: CVE-2021-41495
**CWE**: CWE-476
#### CVE-2021-41495 Details:
- CVSS Score: 7.5
- Description: NumPy before 1.22.0 contains a null pointer dereference...
- CWE: CWE-476 (NULL Pointer Dereference)
**References**:
- https://github.com/numpy/numpy/security/advisories/GHSA-fpfv-jqm9-f5jm
**Recommendation**: Update to a patched version
Create a .env
file in the project root for optional configuration:
# NVD API Key (recommended for better rate limits)
NVD_API_KEY=your-api-key-here
# GitHub token for better rate limits (optional)
GITHUB_TOKEN=your-github-token
# LLM API Keys for AI-powered security assessment (optional)
# If provided, MCP passthrough will use AI to assess security risks
# Supports either OpenAI or Anthropic (provide one or the other)
OPENAI_API_KEY=your-openai-api-key-here
ANTHROPIC_API_KEY=your-anthropic-api-key-here
# Cache TTL in seconds (default: 900)
CACHE_TTL=1800
# Logging configuration
VULNICHECK_LOG_LEVEL=INFO
VULNICHECK_LOG_CONSOLE=false
OSV.dev
NVD (National Vulnerability Database)
GitHub Advisory Database
CIRCL Vulnerability-Lookup
Safety DB
Note: The server automatically handles rate limiting to prevent hitting API limits.
# Quick setup with all dependencies
make install-local
# Or manual setup for development
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e ".[dev]"
make help # Show all available commands
make install # Install package in development mode
make install-dev # Install with development dependencies
make install-local # Set up local environment with Claude integration
make test # Run all tests
make test-unit # Run unit tests only
make test-integration # Run integration tests (requires API credentials)
make test-coverage # Run tests with coverage report
make lint # Run linting checks (ruff + mypy)
make format # Format code with ruff
make clean # Clean build artifacts
# Run all tests
make test
# Run unit tests only
make test-unit
# Run integration tests (requires GITHUB_TOKEN)
make test-integration
# Run with coverage
make test-coverage
# Run specific test categories
make test-mcp # MCP-related tests
make test-security # Security-related tests
make test-clients # Client tests
Note: Integration tests require API credentials (GITHUB_TOKEN) to avoid rate limiting. Tests will be skipped if credentials are not available.
# Run all checks (lint + type checking)
make lint
# Auto-fix issues
make lint-fix
# Format code
make format
The project uses pre-commit hooks to ensure code quality:
# Install pre-commit hooks (one-time setup)
uv run pre-commit install
# Run pre-commit manually on all files
uv run pre-commit run --all-files
Pre-commit checks include:
make lint
- Runs ruff and mypy checksmake test-unit
- Runs unit testsIf you encounter rate limiting errors:
.env
file:
export NVD_API_KEY=your-key-here
export GITHUB_TOKEN=your-token-here
MCP server not found
python -m vulnicheck.server
claude mcp add vulnicheck -- /path/to/vulnicheck/.venv/bin/python -m vulnicheck.server
Permission errors
~/.claude/
Integration test failures
scan_github_repo
tool):
make lint
and make test-unit
before commitsMIT License - see LICENSE file for details
Created and maintained by andrasfe
Please log in to share your review and rating for this MCP.
{ "mcpServers": { "vulnicheck": { "command": "uvx", "args": [ "--from", "git+https://github.com/andrasfe/vulnicheck.git", "vulnicheck" ], "env": { "NVD_API_KEY": "your-nvd-api-key", "GITHUB_TOKEN": "your-github-token" } } } }
Explore related MCPs that share similar capabilities and solve comparable challenges
by chaitin
A self‑hosted web application firewall and reverse proxy that protects web applications from attacks and exploits by filtering, monitoring, and blocking malicious HTTP/S traffic.
by PortSwigger
Enables Burp Suite to communicate with AI clients via the Model Context Protocol, providing an MCP server and bundled stdio proxy.
by cycodehq
Boost security in the development lifecycle via SAST, SCA, secrets, and IaC scanning.
by ChristophEnglisch
Provides AI‑powered administration of Keycloak users and realms through the Model Context Protocol, enabling automated creation, deletion, and listing of users and realms from MCP clients such as Claude Desktop.
by Spathodea-Network
Provides a Model Context Protocol server that enables querying and retrieving threat intelligence data from OpenCTI through a standardized interface.
by firstorderai
Provides seamless access to two‑factor authentication codes and passwords for AI agents, enabling automated login while maintaining security.
by vespo92
Manage OPNsense firewalls through conversational AI, providing network configuration, device discovery, DNS filtering, HAProxy setup, and backup/restore via simple commands.
by mytechnotalent
Provides an AI-driven interface to Malware Bazaar, delivering real-time threat intelligence and sample metadata for authorized cybersecurity research workflows.
by co-browser
Verify that any MCP server is running the intended and untampered code via hardware attestation.