- Clone the repository:
git clone <repository-url>
cd MCP-Security- Install dependencies:
pip install -r requirements.txt- Install the package (optional):
pip install -e .Scan an MCP server for all vulnerabilities:
python -m mcp_security scan --url http://localhost:3000Run a fast security assessment:
python -m mcp_security scan --url http://localhost:3000 --quickTest a specific tool for prompt injection:
python -m mcp_security inject --url http://localhost:3000 --tool search --parameter queryRun comprehensive penetration tests:
python -m mcp_security pentest --url http://localhost:3000Discover available tools and resources:
python -m mcp_security discover --url http://localhost:3000Custom output location:
python -m mcp_security scan --url http://localhost:3000 -o reports/my_scan.jsonText format report:
python -m mcp_security scan --url http://localhost:3000 -f txtSkip specific tests:
python -m mcp_security scan --url http://localhost:3000 --no-prompt-injection
python -m mcp_security scan --url http://localhost:3000 --no-pentestVerbose output:
python -m mcp_security scan --url http://localhost:3000 -vimport asyncio
from mcp_security.scanner.security_scanner_impl import SecurityScanner
async def main():
scanner = SecurityScanner(base_url="http://localhost:3000")
await scanner.initialize()
results = await scanner.run_full_scan()
scanner.save_report(results, "report.json")
await scanner.cleanup()
asyncio.run(main())import asyncio
from mcp_security.client.mcp_client_impl import MCPClient
from mcp_security.attacks.prompt_injection_impl import PromptInjector
async def main():
client = MCPClient(base_url="http://localhost:3000")
await client.connect()
injector = PromptInjector(client)
results = await injector.test_tool("search", "query")
report = injector.generate_report(results)
print(f"Block Rate: {report['summary']['block_rate']}")
await client.close()
asyncio.run(main())import asyncio
from mcp_security.client.mcp_client_impl import MCPClient
from mcp_security.attacks.pentest import PenetrationTester
async def main():
client = MCPClient(base_url="http://localhost:3000")
await client.connect()
tester = PenetrationTester(client)
results = await tester.run_all_tests()
report = tester.generate_report(results)
print(f"Vulnerabilities: {report['summary']['vulnerabilities_found']}")
await client.close()
asyncio.run(main())Create a config.yaml file:
target:
url: "http://localhost:3000"
timeout: 30
tests:
prompt_injection:
enabled: true
penetration_testing:
enabled: true
reporting:
format: "json"
output_dir: "reports/"See config.example.yaml for full configuration options.
Run the example scripts:
# Basic security scan
python examples/basic_scan.py
# Prompt injection testing
python examples/prompt_injection_test.py
# Penetration testing
python examples/penetration_test.py
# Custom workflow
python examples/custom_workflow.py- CRITICAL: Immediate action required, severe vulnerabilities found
- HIGH: Significant security issues detected
- MEDIUM: Moderate security concerns
- LOW: Minor issues or potential risks
- MINIMAL: No significant vulnerabilities found
- Block Rate: Percentage of injection attempts that were blocked
- Higher block rate = better security
- Security Score: Percentage of tests passed
- Higher score = better security
python -m mcp_security scan --url $MCP_SERVER_URL -o reports/scan.json
# Check exit code and parse JSON report# Weekly full scan
python -m mcp_security scan --url http://production-server:3000 -o reports/weekly_$(date +%Y%m%d).json# Quick check during development
python -m mcp_security scan --url http://localhost:3000 --quick# Test basic connectivity
curl http://localhost:3000/mcp/v1/tools/listAdd --no-verify-ssl flag or set verify_ssl: false in config
Add custom headers in config or via environment variables:
target:
headers:
Authorization: "Bearer ${API_TOKEN}"- Always get authorization before testing production systems
- Start with quick scans to verify connectivity
- Review reports carefully - automated tools may have false positives
- Test regularly as part of your security workflow
- Keep the tool updated for latest attack vectors
# View all commands
python -m mcp_security --help
# View command-specific help
python -m mcp_security scan --help
python -m mcp_security inject --help- Review the full
README.mdfor detailed documentation - Check out example scripts in
examples/directory - Customize tests using the Python API
- Integrate into your CI/CD pipeline