Spaces:
Running
Running
| #!/usr/bin/env python3 | |
| """ | |
| MCP server for pip-audit - a tool for scanning Python environments for known vulnerabilities | |
| """ | |
| import subprocess | |
| import json | |
| from typing import Dict | |
| import gradio as gr | |
| import os | |
| def pip_audit_scan() -> Dict: | |
| """ | |
| Scans Python environments for known vulnerabilities using pip-audit with basic settings. | |
| Returns: | |
| Dict: Scan results | |
| """ | |
| try: | |
| cmd = ["pip-audit", "--format", "json"] | |
| print(f"Executing command: {' '.join(cmd)}") | |
| result = subprocess.run(cmd, capture_output=True, text=True, check=False) | |
| stdout, stderr = result.stdout, result.stderr | |
| return_code = result.returncode | |
| if return_code != 0: | |
| print(f"pip-audit command failed with return code {return_code}") | |
| print(f"Stderr: {stderr}") | |
| return { | |
| "success": False, | |
| "error": f"pip-audit command failed with return code {return_code}", | |
| "stdout": stdout, | |
| "stderr": stderr, | |
| "return_code": return_code | |
| } | |
| try: | |
| output_data = json.loads(stdout) if stdout else {} | |
| return { | |
| "success": True, | |
| "results": output_data, | |
| "stderr": stderr, | |
| "return_code": return_code | |
| } | |
| except json.JSONDecodeError as e: | |
| print(f"JSON parsing error: {e}") | |
| print(f"Raw stdout: {stdout}") | |
| return { | |
| "success": False, | |
| "error": "JSON parsing error: " + str(e), | |
| "stdout": stdout, | |
| "stderr": stderr, | |
| "return_code": return_code | |
| } | |
| except Exception as e: | |
| print(f"Error executing pip-audit: {str(e)}") | |
| return { | |
| "success": False, | |
| "error": f"Error executing pip-audit: {str(e)}" | |
| } | |
| # Create Gradio interface | |
| with gr.Blocks(title="Pip Audit MCP") as demo: | |
| gr.Markdown("# 🛡️ Pip Audit Scanner") | |
| gr.Markdown("Vulnerability scanning tool for Python environments with MCP support") | |
| with gr.Tab("Basic Scanning"): | |
| scan_btn = gr.Button("🔍 Run Basic Audit", variant="primary") | |
| scan_output = gr.JSON(label="Audit Results") | |
| scan_btn.click( | |
| fn=pip_audit_scan, | |
| inputs=[], | |
| outputs=scan_output | |
| ) | |
| if __name__ == "__main__": | |
| # Получаем настройки сервера из переменных окружения | |
| server_name = os.getenv("GRADIO_SERVER_NAME", "0.0.0.0") | |
| server_port = int(os.getenv("GRADIO_SERVER_PORT", "7863")) | |
| demo.launch( | |
| mcp_server=True, | |
| server_name=server_name, | |
| server_port=server_port, | |
| share=False | |
| ) | |