BlackVeil DNS & Email Security Scanner
DNS and email security scanner with 82 MCP tools for SPF, DMARC, DNSSEC, SSL, and brand audits.
Description from the maker (original English)
MCP server for OWASP ZAP vulnerability scanning with Docker management
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
ZAP_BASE_URL, ZAP_API_KEYWhich app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"zap": {
"command": "dnx",
"args": [
"dotnet-zap-mcp",
"--yes"
],
"env": {
"ZAP_BASE_URL": "your-value",
"ZAP_API_KEY": "your-value"
}
}
}
}Run this in your terminal
claude mcp add zap --env ZAP_BASE_URL=your-value --env ZAP_API_KEY=your-value -- dnx dotnet-zap-mcp --yesFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"zap": {
"command": "dnx",
"args": [
"dotnet-zap-mcp",
"--yes"
],
"env": {
"ZAP_BASE_URL": "your-value",
"ZAP_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"zap": {
"type": "stdio",
"command": "dnx",
"args": [
"dotnet-zap-mcp",
"--yes"
],
"env": {
"ZAP_BASE_URL": "your-value",
"ZAP_API_KEY": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
ZAP_BASE_URL envZAP_API_KEY envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 8, 2026
The registry name was verified with the GitHub account pierre3, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
The registry does not list a required key, though some servers ask you to sign in on first use.
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (1.1.0) reached the registry 7 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need .NET on your computer.
In the same category: BlackVeil DNS & Email Security Scanner, LucidShark, Threatist
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
DNS and email security scanner with 82 MCP tools for SPF, DMARC, DNSSEC, SSL, and brand audits.
Local code quality and security scanner: lint, types, SAST, SCA, tests, coverage.
Vulnerability records: CVE, GHSA, CISA KEV, EPSS and vendor fixes in one place. No key needed.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
MCP (Model Context Protocol) server for OWASP ZAP. Enables AI agents (Claude, GitHub Copilot, etc.) to drive ZAP vulnerability scanning via MCP.
dotnet tool install -g dotnet-zap-mcp
docker compose support (for built-in ZAP container management)No configuration needed. The agent calls DockerComposeUp which automatically:
~/.zap-mcp/docker/localhost:8090The ZAP container uses two Docker named volumes:
| Volume | Container Path | Purpose |
|---|---|---|
zap-home | /home/zap/.ZAP | ZAP settings, contexts, sessions, scan policies (persisted across restarts) |
zap-data | /zap/wrk/data | Shared directory for reports, session files, and context import/export |
On the first launch, the template config.xml is copied into zap-home. On subsequent launches, only the API key is updated — any changes made through ZAP (contexts, authentication settings, scan policies, etc.) are preserved.
The zap-data volume contains:
reports/ — generated scan reportssessions/ — saved ZAP sessionscontexts/ — exported context filesAdd to your MCP configuration:
{
"mcpServers": { "zap": { "command": "zap-mcp" } } }
Add to .vscode/mcp.json:
{
"servers": { "zap": { "command": "zap-mcp" } } }
If you already have a ZAP instance running, pass connection details via environment variables:
{
"mcpServers": { "zap": { "command": "zap-mcp", "env": { "ZAP_BASE_URL": "http://localhost:8090", "ZAP_API_KEY": "your-api-key" } } } }
| Tool | Parameters | Description |
|---|---|---|
DockerComposeUp | — | Start the ZAP container and wait for healthy |
DockerComposeDown | — | Stop and remove the ZAP container |
DockerComposeStatus | — | Check container status |
DockerComposeLogs | tail | Get recent container logs |
| Tool | Parameters | Description |
|---|---|---|
GetVersion | — | Verify ZAP connectivity |
GetHosts | — | List recorded hosts |
GetSites | — | List recorded sites |
GetUrls | baseUrl | List recorded URLs for a base URL |
| Tool | Parameters | Description |
|---|---|---|
StartSpider | url, maxChildren, recurse, subtreeOnly, contextName | Start a spider scan to crawl and discover pages |
GetSpiderStatus | scanId | Check spider progress (0-100%) |
GetSpiderResults | scanId | Get URLs discovered by spider |
StopSpider | scanId | Stop a running spider scan |
| Tool | Parameters | Description |
|---|---|---|
StartActiveScan | url, recurse, inScopeOnly, scanPolicyName, contextId | Start an active vulnerability scan |
GetActiveScanStatus | scanId | Check active scan progress (0-100%) |
StopActiveScan | scanId | Stop a running active scan |
| Tool | Parameters | Description |
|---|---|---|
GetPassiveScanStatus | — | Check passive scan progress (records remaining) |
| Tool | Parameters | Description |
|---|---|---|
GetAlertsSummary | baseUrl | Alert counts by risk level |
GetAlerts | baseUrl, start, count, riskId | Detailed alert list with pagination and risk filter |
| Tool | Parameters | Description |
|---|---|---|
GetHtmlReport | — | Generate HTML scan report |
GetJsonReport | — | Generate JSON scan report |
GetXmlReport | — | Generate XML scan report |
| Tool | Parameters | Description |
|---|---|---|
GetContextList | — | List all contexts defined in ZAP |
GetContext | contextName | Get context details (scope patterns, etc.) |
CreateContext | contextName | Create a new context |
RemoveContext | contextName | Delete a context |
IncludeInContext | contextName, regex | Add URL include pattern to context scope |
ExcludeFromContext | contextName, regex | Add URL exclude pattern to context scope |
ImportContext | contextFilePath | Import a context file into ZAP |
ExportContext | contextName, contextFilePath | Export a context to file |
| Tool | Parameters | Description |
|---|---|---|
GetAuthenticationMethod | contextId | Get the authentication method configured for a context |
SetAuthenticationMethod | contextId, authMethodName, authMethodConfigParams | Set authentication method (form-based, JSON-based, script-based, HTTP) |
SetLoggedInIndicator | contextId, loggedInIndicatorRegex | Set regex pattern indicating logged-in state |
SetLoggedOutIndicator | contextId, loggedOutIndicatorRegex | Set regex pattern indicating logged-out state |
| Tool | Parameters | Description |
|---|---|---|
GetUsersList | contextId | List all users for a context |
CreateUser | contextId, name | Create a new user |
RemoveUser | contextId, userId | Remove a user |
SetAuthenticationCredentials | contextId, userId, authCredentialsConfigParams | Set user credentials (username/password) |
SetUserEnabled | contextId, userId, enabled | Enable or disable a user |
| Tool | Parameters | Description |
|---|---|---|
SetForcedUser | contextId, userId | Set the forced user for a context |
SetForcedUserModeEnabled | enabled | Enable or disable forced user mode globally |
GetForcedUserStatus | contextId | Get forced user mode status and current forced user |
| Tool | Parameters | Description |
|---|---|---|
StartAjaxSpider | url, inScope, contextName, subtreeOnly | Start the Ajax Spider for JavaScript-heavy apps |
StartAjaxSpiderAsUser | contextName, userId, url, subtreeOnly | Start the Ajax Spider as a specific user |
GetAjaxSpiderStatus | — | Get Ajax Spider status (running/stopped) |
GetAjaxSpiderResults | — | Get Ajax Spider results summary |
StopAjaxSpider | — | Stop the Ajax Spider |
DockerComposeUp to start ZAPhttp://127.0.0.1:8090)StartSpider to crawl the application, then GetSpiderStatus to monitor progressGetPassiveScanStatus to wait for passive scan completionStartActiveScan on key pages, then GetActiveScanStatus to monitor progressGetAlertsSummary and GetAlerts to retrieve vulnerability findingsGetHtmlReport or GetJsonReport to generate a scan reportDockerComposeDown when doneNote: ZAP settings (contexts, authentication, scan policies) are persisted in the
zap-homeDocker volume. You can stop and restart the container without losing configuration.
This repository includes an intentionally vulnerable web application for trying out ZAP scanning. The app contains common vulnerabilities (XSS, SQL Injection, CSRF, Open Redirect) so ZAP can detect real findings.
# Start ZAP and the vulnerable target app
docker compose -f tests/docker/docker-compose.test.yml up -d --build
docker compose -f tests/docker/docker-compose.test.yml ps
Then configure your MCP client to connect to this ZAP instance:
{
"mcpServers": { "zap": { "command": "zap-mcp", "env": { "ZAP_BASE_URL": "http://localhost:8090", "ZAP_API_KEY": "test-api-key-for-ci" } } } }
The vulnerable app is accessible at
http://targetfrom within the Docker network (used by ZAP), and athttp://localhost:8080from your host machine.
Prompt to agent:
Scan http://target for vulnerabilities. Run a spider crawl, wait for the passive scan to finish, then show me the alert summary and generate an HTML report.
Expected tool flow:
GetVersion → Verify ZAP connectivity
StartSpider → url: "http://target" GetSpiderStatus → Poll until 100% GetPassiveScanStatus → Poll until 0 records remaining GetAlertsSummary → baseUrl: "http://target" GetAlerts → baseUrl: "http://target" GetHtmlReport → Generate report
ZAP will discover pages like /search, /login, /users, /about, /contact, and the passive scan will report issues such as missing security headers and CSRF vulnerabilities.
The /admin page requires login (username: admin, password: password). An authenticated scan lets ZAP access protected pages.
Prompt to agent:
Set up an authenticated scan for http://target. The login form is at /login with fields "username" and "password" (credentials: admin / password). The logged-in indicator is "Welcome, admin". After configuring authentication, spider the site as the authenticated user and run an active scan.
Expected tool flow:
CreateContext → contextName: "target-auth"
IncludeInContext → regex: "http://target.*" SetAuthenticationMethod → contextId, authMethodName: "formBasedAuthentication", authMethodConfigParams: "loginUrl=http://target/login&loginRequestData=username%3D%7B%25username%25%7D%26password%3D%7B%25password%25%7D" SetLoggedInIndicator → loggedInIndicatorRegex: "Welcome, admin" CreateUser → contextId, name: "admin" SetAuthenticationCredentials → contextId, userId, authCredentialsConfigParams: "username=admin&password=password" SetUserEnabled → contextId, userId, enabled: true SetForcedUser → contextId, userId SetForcedUserModeEnabled → enabled: true StartSpider → url: "http://target", contextName: "target-auth" GetSpiderStatus → Poll until 100% GetPassiveScanStatus → Poll until 0 records remaining StartActiveScan → url: "http://target" GetActiveScanStatus → Poll until 100% GetAlertsSummary → baseUrl: "http://target" GetAlerts → baseUrl: "http://target" SetForcedUserModeEnabled → enabled: false
With authentication configured, ZAP can access /admin and test for vulnerabilities behind the login.
Only the beginning is shown; read the rest in the repo