Provides real-time OWASP ASVS security guidance, vulnerability scanning, and secure code fixes for AI coding agents during code generation
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@VSGuard MCPscan this Python login function for security issues"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
VSGuard MCP - Security guardrails for AI coding agents
VSGuard is the first MCP server that makes security automatic for AI-assisted development. It integrates OWASP ASVS and OWASP LLM Top 10 standards directly into your AI coding workflow, catching SQL injections, prompt injections, weak authentication, and 50+ other vulnerabilities as you code—not after deployment.
Overview
This MCP server integrates with Claude Code, Cursor, and other MCP-clients to enable proactive security during code generation. It helps AI agents write secure code from the start by providing:
OWASP ASVS Requirements - Real-time security guidance based on ASVS v5.0
Vulnerability Scanning - Static analysis using Semgrep with custom ASVS rules
Secure Code Fixes - Actionable remediation with code examples
Features
Four Core Tools
list_asvs_categories- Discover available ASVS categories and chaptersSee all 17 chapters and 80 categories
Find the right search terms for your needs
check_security_requirements- Get relevant ASVS requirements before writing codeSearch by category (most precise) or chapter (broader)
Free-text query search for natural language
Filter by level to reduce token usage
scan_code- Analyze code for vulnerabilities with ASVS mappingssuggest_fix- Generate secure code alternatives with explanations
Security Coverage
✅ Authentication (ASVS Chapter 2)
✅ Session Management (ASVS Chapter 3)
✅ Access Control (ASVS Chapter 4)
✅ Input Validation & Injection Prevention (ASVS Chapter 5)
✅ Cryptography (ASVS Chapters 6-9)
✅ Data Protection
Supported Languages
Python (primary)
JavaScript/TypeScript
Java, Go, Ruby, PHP, C/C++, C#, Rust (via Semgrep)
Quick Start
Works with Cursor and Claude Code! Use the HTTP-based configuration format:
{
"mcpServers": {
"vsguard": {
"type": "http",
"url": "https://vsguard.fastmcp.app/mcp"
}
}
}If you prefer Smithery
To install VSGuard automatically via Smithery:
npx -y @smithery/cli install @harn1shmodi/vsguardIf you prefer remote installation
# Clone repository
git clone https://github.com/yourname/vsguard-mcp
cd vsguard-mcp
# Install dependencies
pip install -e .Configure the mcp.json for Claude Code/Cursor
{
"mcpServers": {
"vsguard": {
"command": "python",
"args": ["/absolute/path/to/vsguard-mcp/src/server.py"]
}
}
}Usage Examples
Example 1: Get Security Requirements during code generation
In Claude Desktop:
Create a user login endpoint, follow asvs requirements.Claude will call:
check_security_requirements(
chapter="Authentication", # or category="Password Security" for precision
language="python"
)Response:
# OWASP ASVS Security Requirements
## Level 1 Requirements (8)
### 2.1.1: Password Security
Requirement: Verify that user set passwords are at least 12 characters in length.
Implementation Guide:
- Add validation during user registration and password change
- Reject passwords shorter than 12 characters
- Consider allowing longer passwords (64+ chars)
Code Example:
```python
def validate_password_length(password: str) -> bool:
if len(password) < 12:
raise ValueError("Password must be at least 12 characters")
return TrueExample 2: Scan Existing Code for Vulnerabilities
In Claude Desktop:
Can you check the login logic code for security issues?Claude will call:
scan_code(
code="""def login(username, password):
query = f"SELECT * FROM users WHERE username = '{username}'"
cursor.execute(query)""",
language="python"
)Response:
❌ SCAN FAILED
Total Findings: 1
- 🟠 HIGH: 1
ASVS Requirements Violated: 5.3.4, 5.3.5
## Detailed Findings
### 1. 🟠 SQL Injection
Severity: HIGH
ASVS Requirements: 5.3.4, 5.3.5
Issue:
SQL injection vulnerability detected. User input is concatenated directly into SQL query.
Location: input.py:line 2
Vulnerable Code:
query = f"SELECT * FROM users WHERE username = '{username}'"
Remediation:
Use parameterized queries with placeholders instead of string concatenation.
Example:
cursor.execute("SELECT * FROM users WHERE username = ?", (username,))Example 3: Get Secure Code Fix
In Claude Desktop:
How do I fix this SQL injection vulnerability?Claude will call:
suggest_fix(
vulnerable_code="cursor.execute(f'SELECT * FROM users WHERE id = {user_id}')",
vulnerability_type="sql_injection",
language="python"
)Response:
# Security Fix Suggestion
ASVS Requirements Addressed 5.3.4, 5.3.5
## ❌ Vulnerable Code
cursor.execute(f"SELECT * FROM users WHERE id = {user_id}")
## ✅ Secure Code
cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
# Or with SQLAlchemy ORM:
from sqlalchemy import select
stmt = select(User).where(User.username == username)
user = session.execute(stmt).scalar_one_or_none()Testing
# Run tests
pytest tests/
# Run specific test
pytest tests/test_asvs_loader.py
# With coverage
pytest --cov=src tests/Coverage
Current implementation includes:
40+ ASVS Requirements across authentication, session management, input validation, and cryptography
25+ Custom Semgrep Rules detecting common vulnerabilities
10+ Fix Templates with secure code examples
Multiple Languages supported (Python, JavaScript, TypeScript, etc.)
Vulnerability Detection
SQL Injection (ASVS 5.3.4, 5.3.5)
Cross-Site Scripting (ASVS 5.3.3, 5.3.10)
Weak Password Validation (ASVS 2.1.1, 2.1.7)
Weak Cryptography (ASVS 6.2.2, 6.2.5)
Hardcoded Secrets (ASVS 2.3.1, 14.3.3)
Session Management Issues (ASVS 3.x)
XML External Entity (XXE) (ASVS 5.5.2)
Command Injection (ASVS 5.3.4)
And more...
How It Works
1. ASVS Requirements Database
The server loads OWASP ASVS v4.0 requirements from structured YAML files:
requirements:
- id: "2.1.1"
level: 1
category: "Password Security"
requirement: "Verify that user set passwords are at least 12 characters in length."
cwe: "CWE-521"
description: "Passwords should be sufficiently long..."
implementation_guide: "Add validation during registration..."
code_examples:
- |
if len(password) < 12:
raise ValueError("Too short")2. Static Analysis with Semgrep
Custom Semgrep rules detect ASVS violations:
rules:
- id: asvs-5-3-4-sql-injection
pattern: cursor.execute(f"... {$VAR} ...")
message: "ASVS 5.3.4: SQL injection vulnerability"
severity: ERROR
metadata:
asvs_id: "5.3.4"
cwe: "CWE-89"3. Intelligent Mapping
Findings are automatically mapped to ASVS requirements by:
Vulnerability type (sql_injection → ASVS 5.3.4)
CWE ID (CWE-89 → ASVS 5.3.4, 5.3.5)
Code patterns (login endpoints → authentication requirements)
4. LLM-Optimized Output
All responses are formatted for maximum LLM comprehension:
Clear structure with headers and sections
Code examples with syntax highlighting
Severity indicators (🔴 🟠 🟡)
Actionable remediation steps
ASVS requirement references
🔧 Extending the Server
Add New ASVS Requirements
Create/edit YAML files in data/asvs/:
requirements:
- id: "X.Y.Z"
level: 1
category: "Your Category"
requirement: "Requirement text"
cwe: "CWE-XXX"
description: "Detailed explanation"
implementation_guide: "How to implement"
code_examples:
- "Example code"Add Custom Semgrep Rules
Create YAML files in data/rules/:
rules:
- id: custom-rule-id
patterns:
- pattern: vulnerable_pattern()
message: "Vulnerability description"
severity: ERROR
metadata:
asvs_id: "X.Y.Z"
cwe: "CWE-XXX"
remediation: "How to fix"Add Fix Templates
Edit src/fixes/templates.py:
FIX_TEMPLATES = {
"vulnerability_type": {
"python": {
"vulnerable": "# Bad code",
"secure": "# Good code",
"explanation": "Why it's better",
"asvs_requirements": ["X.Y.Z"],
}
}
}🤝 Contributing
Contributions welcome! Areas for improvement:
More ASVS Requirements - Cover additional chapters
More Languages - Expand language support
More Scanners - Integrate Bandit, detect-secrets
Better AI Integration - Improve LLM output formatting
Performance - Optimize scanning speed
⚡ Powered By
FastMCP 2.0 - Modern Python framework for MCP servers
Semgrep - Static analysis engine
OWASP ASVS - Security verification standard
📝 License
MIT License - see LICENSE file for details.
🔗 Resources
🙏 Acknowledgments
OWASP for the ASVS standard
Anthropic for the MCP protocol
Semgrep for the scanning engine
📧 Support
For issues, questions, or contributions, please open an issue on GitHub.
Built with ❤️ for secure AI-assisted development