VulniCheck
by andrasfe
README.md
# VulniCheck - AI-Powered Security Scanner
VulniCheck provides comprehensive security analysis for Python projects and GitHub repositories using AI-powered vulnerability detection. It runs as a Docker-based HTTP MCP server with standard HTTP streaming (no SSE required), providing secure containerized deployment with comprehensive vulnerability scanning capabilities.
## Quick Start
### 1. Pull and Run the Docker Container
```bash
# Pull the latest image from Docker Hub
docker pull andrasfe/vulnicheck:latest
# Run with OpenAI API key (for enhanced AI-powered risk assessment)
docker run -d --name vulnicheck-mcp -p 3000:3000 \
--restart=unless-stopped \
-e OPENAI_API_KEY=your-openai-api-key \
andrasfe/vulnicheck:latest
# Or run without API key (basic vulnerability scanning)
docker run -d --name vulnicheck-mcp -p 3000:3000 \
--restart=unless-stopped \
andrasfe/vulnicheck:latest
```
### 2. Add to Claude Code
```bash
claude mcp add --transport http vulnicheck http://localhost:3000/mcp
```
That's it! VulniCheck is now available in Claude Code.
## Usage
Once installed, simply ask Claude:
```
"Run a comprehensive security check on my project"
"Scan https://github.com/owner/repo for vulnerabilities"
"Check my dependencies for security issues"
"Scan my Dockerfile for vulnerable packages"
```
VulniCheck will:
- ✅ Scan dependencies for known vulnerabilities (requirements.txt, pyproject.toml, setup.py)
- ✅ Detect exposed secrets and credentials
- ✅ Analyze Dockerfiles for security issues
- ✅ Validate MCP configurations
- ✅ Generate AI-powered risk assessments
- ✅ Provide actionable remediation recommendations
## Key Features
- **Docker Deployment**: Secure containerized deployment with HTTP streaming (no SSE/Server-Sent Events required)
- **Optional Authentication**: Supports Google OAuth 2.0 for secure access control (disabled by default)
- **Production Ready**: Scalable HTTP server architecture
- **Comprehensive Coverage**: Queries 5+ vulnerability databases (OSV.dev, NVD, GitHub Advisory, CIRCL, Safety DB)
- **GitHub Integration**: Scan any public/private GitHub repository directly (up to 1GB)
- **AI-Powered Analysis**: Uses OpenAI/Anthropic APIs for intelligent security assessment
- **Secrets Detection**: Finds exposed API keys, passwords, and credentials
- **Docker Security**: Analyzes Dockerfiles for vulnerable dependencies
- **Smart Caching**: Avoids redundant scans with commit-level caching
- **Space Management**: Automatic cleanup prevents disk exhaustion (2GB total limit)
- **Zero Config**: Works out of the box, enhanced with optional API keys
## Available Tools
| Tool | Description |
|------|-------------|
| `check_package_vulnerabilities` | Check a specific Python package for vulnerabilities |
| `scan_dependencies` | Scan dependency files (requirements.txt, pyproject.toml, etc.) |
| `scan_installed_packages` | Scan currently installed Python packages |
| `get_cve_details` | Get detailed information about a specific CVE |
| `scan_for_secrets` | Detect exposed secrets and credentials in code |
| `scan_dockerfile` | Analyze Dockerfiles for vulnerable Python dependencies |
| `scan_github_repo` | Comprehensive security scan of GitHub repositories |
| `assess_operation_safety` | AI-powered risk assessment for operations |
| `validate_mcp_security` | Validate MCP server security configurations |
| `comprehensive_security_check` | Interactive AI-powered security assessment |
## Optional API Keys
Enhance VulniCheck with API keys for better rate limits and AI features:
```bash
docker run -d --name vulnicheck-mcp -p 3000:3000 \
--restart=unless-stopped \
-e OPENAI_API_KEY=your-key \ # AI-powered risk assessment
-e ANTHROPIC_API_KEY=your-key \ # Alternative AI provider
-e GITHUB_TOKEN=your-token \ # Higher GitHub API rate limits
-e NVD_API_KEY=your-key \ # Higher NVD rate limits
andrasfe/vulnicheck:latest
```
## Authentication (Optional)
VulniCheck supports optional Google OAuth 2.0 authentication for secure access control. By default, authentication is **disabled**.
### Enabling Google OAuth
1. **Get Google OAuth Credentials**:
- Go to [Google Cloud Console](https://console.cloud.google.com/)
- Create a project and enable Google+ API
- Create OAuth 2.0 credentials (Web application)
- Add authorized redirect URI: `http://localhost:3000/oauth/callback` (or your domain)
2. **Configure Environment Variables**:
```bash
export FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_ID="your-client-id.apps.googleusercontent.com"
export FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_SECRET="GOCSPX-your-secret-here"
export FASTMCP_SERVER_BASE_URL="http://localhost:3000"
```
3. **Run with Authentication**:
```bash
docker run -d --name vulnicheck-mcp -p 3000:3000 \
--restart=unless-stopped \
-e FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_ID=your-client-id \
-e FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_SECRET=your-secret \
-e FASTMCP_SERVER_BASE_URL=http://localhost:3000 \
-v vulnicheck_tokens:/home/vulnicheck/.vulnicheck/tokens \
andrasfe/vulnicheck:latest \
python -m vulnicheck.server --auth-mode google
```
4. **Using docker-compose**:
See `docker-compose.auth-example.yml` for a complete configuration example.
**Note**: OAuth tokens are persisted in `/home/vulnicheck/.vulnicheck/tokens`. Use a Docker volume to persist tokens across container restarts.
### ⚠️ Known OAuth Limitations
**FastMCP OAuth + HTTP Transport Incompatibility**
Due to a limitation in FastMCP 2.12.4, OAuth authentication **does not work properly** with HTTP transport (streamable-http). The authorization endpoints (`/oauth/authorize`, `/oauth/callback`) are not correctly mounted, resulting in 404 errors.
**When OAuth Works:**
- ✅ Local connections (when supported in future FastMCP versions)
- ✅ OAuth discovery endpoint works (`/.well-known/oauth-protected-resource`)
**When OAuth Does NOT Work:**
- ❌ HTTP transport with external clients (ChatGPT, Claude Desktop, etc.)
- ❌ Authorization endpoints return 404
- ❌ Token exchange fails
**Workaround for External Clients (ChatGPT, etc.):**
Run VulniCheck **without authentication** when accessing through ngrok or other public URLs:
```bash
# Start without OAuth (recommended for external clients)
docker run -d --name vulnicheck-mcp -p 3000:3000 \
--restart=unless-stopped \
andrasfe/vulnicheck:latest
# Then configure ngrok
ngrok http 3000
```
In your MCP client (ChatGPT, etc.):
- **URL**: `https://your-ngrok-url.ngrok-free.dev/mcp`
- **Authentication**: None
**Security Considerations:**
- ✅ Traffic is encrypted via HTTPS (ngrok)
- ⚠️ No authentication - anyone with URL can access
- 💡 ngrok free URLs change on restart (security through obscurity)
- 🔒 For production, use ngrok paid tier with password protection or IP whitelisting
**Future Resolution:**
This limitation will be resolved when:
1. FastMCP fixes OAuth + HTTP transport support, OR
2. Alternative authentication mechanisms are implemented
### Using with ngrok
**Quick Start (No OAuth):**
```bash
# 1. Start VulniCheck
docker run -d --name vulnicheck-mcp -p 3000:3000 \
--restart=unless-stopped \
andrasfe/vulnicheck:latest
# 2. Start ngrok
ngrok http 3000
# 3. Use the ngrok URL in your MCP client
# URL: https://your-generated-url.ngrok-free.dev/mcp
# Authentication: None
```
**Optional OAuth Script (Experimental - OAuth Not Functional):**
A convenience script `restart-vulnicheck-ngrok.sh` is provided for testing OAuth, but **OAuth does not currently work** due to FastMCP limitations:
```bash
# Copy the example environment file
cp .env.example .env
# Edit .env and add your credentials
GOOGLE_CLIENT_ID=your-client-id.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-your-secret-here
NGROK_URL=https://your-ngrok-url.ngrok-free.dev
# Run the script (OAuth will not work)
./restart-vulnicheck-ngrok.sh
```
**Note**: The script is provided for future use when FastMCP OAuth + HTTP transport is fixed. Currently, always run without OAuth for external clients.
## Building from Source
```bash
# Clone the repository
git clone https://github.com/andrasfe/vulnicheck.git
cd vulnicheck
# Build Docker image
docker build -t vulnicheck .
# Run locally built image (no auth)
docker run -d --name vulnicheck-mcp -p 3000:3000 --restart=unless-stopped vulnicheck
# Run with Google OAuth
docker run -d --name vulnicheck-mcp -p 3000:3000 \
--restart=unless-stopped \
-e FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_ID=your-client-id \
-e FASTMCP_SERVER_AUTH_GOOGLE_CLIENT_SECRET=your-secret \
-e FASTMCP_SERVER_BASE_URL=http://localhost:3000 \
-v vulnicheck_tokens:/home/vulnicheck/.vulnicheck/tokens \
vulnicheck \
python -m vulnicheck.server --auth-mode google
```
## Docker Hub
The official Docker image is available at:
- **Docker Hub**: [andrasfe/vulnicheck](https://hub.docker.com/r/andrasfe/vulnicheck)
- **Latest Tag**: `andrasfe/vulnicheck:latest`
## Requirements
- Docker
- Claude Code or any MCP client with HTTP transport support (standard HTTP, no SSE required)
- Optional: API keys for enhanced features
## Supported File Types
- **Dependencies**: `requirements.txt`, `pyproject.toml`, `setup.py`, lock files
- **Containers**: `Dockerfile`, `docker-compose.yml`
- **Secrets**: All text-based source files
- **GitHub**: Any public or private repository URL
## Support
- **Issues**: Report problems at https://github.com/andrasfe/vulnicheck/issues
- **Development**: See [CLAUDE.md](CLAUDE.md) for development details
- **Security**: Report security issues privately via GitHub Security Advisories
---
**DISCLAIMER**: Vulnerability data provided "AS IS" without warranty. Users are responsible for verification and remediation.
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessUnresponsive