Skip to main content
Glama
Skyrxin
by Skyrxin

SAST MCP Server

PyPI version sast-mcp-server MCP server Python 3.10+ License: MIT CI codecov

Static Application Security Testing (SAST) for AI agents. A production-ready MCP server that gives any AI agent the ability to scan code for security vulnerabilities.

Supports 11 industry-standard scanners:

Scanner

Languages / Scope

Type

Bandit

Python

Security linter

njsscan

JavaScript, Node.js

Static analysis

Bearer

Python, JS, Ruby, Java, Go, PHP

Data-flow SAST

Semgrep

30+ languages

Rule-based SAST

Trivy

All (CVEs, Secrets, IaC, images)

Multi-scanner

CodeQL

Python, JS, Java, Go, C/C++, C#, Ruby, Swift

Semantic SAST

Checkov

Terraform, K8s, Docker, CloudFormation

IaC policy scanner

Gitleaks

All (.git history)

Deep secret scanning

OSV-Scanner

Multiple (lockfiles, sboms)

SCA

Grype

Containers, OS packages, lockfiles, SBOMs

SCA / image scanning

OWASP ZAP

RUNTIME

Dynamic (DAST) via Docker

Works with any MCP-compatible agent: Gemini CLI, Claude Desktop, OpenAI Agents, Cursor, Windsurf, and more.


Features

  • 🔍 11 SAST/SCA/DAST scanners with a unified output format

  • 🌳 AST-aware context — shows the full enclosing function, not just a line number

  • 📊 Severity & confidence filtering — focus on what matters

  • 🔀 Git diff mode — scan only modified files for incremental reviews

  • 🙈 Ignore management — suppress false positives with audit trail

  • 📄 Pagination — handle large codebases without overwhelming the agent

  • 🌐 Dual transport — stdio (local) or Streamable HTTP (remote deployments)

  • 🔐 JWT & API key authentication — secure remote deployments

  • 📦 One command installpip install sast-mcp-server

  • 🚀 Multi-scanner mode — run all installed scanners in parallel with deduplication

  • 📋 SARIF export — CI/CD integration with GitHub, GitLab, Azure DevOps

  • 🏗️ IaC scanning — Terraform, Kubernetes, Docker security policies

  • 🔑 Secret detection — find hardcoded API keys, tokens, and passwords in code and git history

  • 📦 SCA / dependency CVEs — scan lock files for known vulnerabilities against the OSV database

  • 🕷️ DAST — dynamic baseline scans of running apps via OWASP ZAP + Docker

  • 📈 Baselines & trend tracking — cache scans and diff against a saved baseline

  • 🤖 MCP Prompts & Resources — pre-built security workflows and live dashboards for agents

  • 📤 Dashboard integrations — push SARIF results to DefectDojo or GitHub Code Scanning

  • 🩹 AI-assisted remediation — generate fix prompts and apply agent-written patches via git apply


Related MCP server: Security-Use MCP Server

Quick Start

The server is only as useful as the scanners installed alongside it. Pick the install path that matches how much of the toolset you want out of the box.

docker pull ghcr.io/skyrxin/sast-mcp-server:full

Bundles bandit, njsscan, bearer, semgrep, trivy, checkov, gitleaks, osv-scanner, and grype so scan_all works immediately. Or bring up an HTTP server with one command:

docker compose up          # serves http://localhost:8080/mcp + /health /ready /metrics

Option 2 — pip extra (4 pip-installable scanners)

pip install "sast-mcp-server[scanners]"   # adds bandit, njsscan, semgrep, checkov

Option 3 — minimal / custom

pip install sast-mcp-server               # server only — bring your own scanners
uvx sast-mcp-server                        # run without installing

Then install whichever scanners you need (binary scanners aren't pip packages):

pip install bandit njsscan semgrep checkov     # pip-installable
# trivy:        https://aquasecurity.github.io/trivy/latest/getting-started/installation/
# grype:        https://github.com/anchore/grype#installation
# gitleaks:     https://github.com/gitleaks/gitleaks#installing
# osv-scanner:  https://google.github.io/osv-scanner/installation/
# bearer:       https://docs.bearer.com/installation/
# codeql:       https://github.com/github/codeql-cli-binaries/releases

What ships where

Scanner

:full image

[scanners] extra

Notes

Bandit

pip

njsscan

pip

Semgrep

pip

Checkov

pip

Bearer

install script

Trivy

binary

Gitleaks

binary

OSV-Scanner

binary

Grype

binary

CodeQL

multi-GB bundle — mount at runtime

OWASP ZAP

runs via Docker on the host (run_active_scan)

At startup the server logs how many scanners it can actually see (e.g. Scanners available: 9/11 (...)), and the list_scanners tool / /ready endpoint report the same — so it's always obvious what you have.

sast-mcp-server MCP server


Usage with AI Agents

Gemini CLI

Install as an extension:

gemini extensions install https://github.com/Skyrxin/sast-mcp-server

Or add to your ~/.gemini/settings.json:

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}

See full Claude Desktop guide.

Cursor IDE

Add to Cursor Settings → MCP Servers:

{
  "mcpServers": {
    "sast": {
      "command": "uvx",
      "args": ["sast-mcp-server"]
    }
  }
}

See full Cursor guide.

OpenAI Agents SDK

from agents.mcp import MCPServerStdio

sast_server = MCPServerStdio(command="uvx", args=["sast-mcp-server"])

See full OpenAI guide.


Available MCP Tools

scan_vulnerabilities

Scan a directory for security vulnerabilities using a specific scanner.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

scanner_name

string

"bearer"

Scanner: bandit, njsscan, bearer, semgrep, trivy, codeql, checkov

min_severity

string

"LOW"

Minimum severity: LOW, MEDIUM, HIGH, CRITICAL

min_confidence

string

"LOW"

Minimum confidence: LOW, MEDIUM, HIGH

git_diff_only

bool

false

Only scan git-modified files

limit

int

50

Max findings to return

offset

int

0

Pagination offset

scan_all

Run ALL installed scanners in parallel with automatic deduplication. Recommended for comprehensive security scanning.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

min_severity

string

"MEDIUM"

Minimum severity (higher default to reduce noise)

min_confidence

string

"LOW"

Minimum confidence

git_diff_only

bool

false

Only scan git-modified files

limit

int

50

Max findings to return

offset

int

0

Pagination offset

scan_git_history

Scan the entire .git history for leaked secrets and credentials using Gitleaks.

Parameter

Type

Default

Description

target_path

string

"."

Path to the repository root (must contain .git)

min_severity

string

"LOW"

Minimum severity to report

run_active_scan

Run a dynamic (DAST) baseline scan with OWASP ZAP by orchestrating a Docker Compose stack.

Parameter

Type

Default

Description

target_path

string

required

Directory containing the docker-compose file

docker_compose_file

string

required

Name of the docker-compose file (e.g. docker-compose.yml)

target_url

string

required

URL of the running app once it's up (e.g. http://localhost:8080)

export_sarif

Export scan results in SARIF 2.1.0 format for CI/CD integration.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

scanner_name

string

"bearer"

Scanner to use

min_severity

string

"LOW"

Minimum severity

min_confidence

string

"LOW"

Minimum confidence

output_path

string

""

File path to write SARIF (empty = return as string)

list_scanners

List available scanners, their installation status, and supported languages.

ignore_vulnerability

Suppress a finding from future scans (with audit trail).

unignore_vulnerability

Re-enable a previously suppressed finding.

list_ignored_vulnerabilities

Show all currently suppressed findings for a project.

save_baseline

Run a scan and cache the results as a named baseline for future trend comparison.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

tag

string

"latest"

Name for this baseline (e.g. main, pre-release)

scanner_name

string

"bearer"

Scanner to use

min_severity

string

"LOW"

Minimum severity to include

min_confidence

string

"LOW"

Minimum confidence to include

compare_baseline

Compare a fresh scan against a saved baseline to highlight new and fixed findings.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

tag

string

"latest"

Baseline tag to compare against

scanner_name

string

"bearer"

Scanner to use

min_severity

string

"LOW"

Minimum severity to include

min_confidence

string

"LOW"

Minimum confidence to include

upload_to_defectdojo

Import a SARIF export into a DefectDojo engagement. Requires DEFECTDOJO_URL and DEFECTDOJO_API_KEY environment variables.

Parameter

Type

Default

Description

sarif_path

string

required

Path to a SARIF file from export_sarif

engagement_id

int

required

Target DefectDojo engagement ID

active

bool

true

Mark imported findings active

verified

bool

false

Mark imported findings verified

upload_to_github

Upload a SARIF report to GitHub Code Scanning. Requires a GITHUB_TOKEN with security_events: write scope.

Parameter

Type

Default

Description

sarif_path

string

required

Path to a SARIF file from export_sarif

repo

string

required

Repository in owner/name form

commit_sha

string

required

Full commit SHA the results apply to

ref

string

required

Fully qualified ref, e.g. refs/heads/main

generate_fix_prompt

Package a cached finding's vulnerable code and context into an LLM-ready prompt that asks for a strict unified diff fix.

Parameter

Type

Default

Description

target_path

string

required

Scanned project root (with .sast-mcp-cache)

finding_hash

string

required

Hash of the finding to fix (from scan output)

context_window

int

15

Source lines to include before/after the finding

apply_patch

Apply an agent-generated unified diff to disk via git apply (paths that escape the target directory are rejected).

Parameter

Type

Default

Description

target_path

string

required

Directory the patch paths are relative to

patch

string

required

The unified diff text to apply

check_only

bool

false

Validate without modifying files

evaluate_policy

Run all scanners and return an explicit PASS/FAIL verdict for CI gating.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

max_critical

int

0

Max allowed CRITICAL (−1 = unlimited)

max_high

int

-1

Max allowed HIGH (−1 = unlimited)

max_medium

int

-1

Max allowed MEDIUM (−1 = unlimited)

fail_on_new

bool

false

Fail if findings are new vs. a scan_all baseline

baseline_tag

string

"latest"

Baseline tag used when fail_on_new

output_format

string

"markdown"

markdown or json

export_sbom

Run all scanners and export an SBOM / vulnerability report. In CycloneDX mode, if Syft is installed the component inventory is the full dependency list (not just vulnerable packages).

Parameter

Type

Default

Description

target_path

string

required

Path to scan

output_path

string

""

File to write (empty = return inline)

min_severity

string

"LOW"

Minimum severity to include

sca_only

bool

true

Only dependency (SCA) findings; false = all

format

string

"cyclonedx"

cyclonedx or spdx (SPDX 2.3)

generate_report

Run all scanners and render an executive security report.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

output_path

string

""

File to write (empty = return inline HTML; required for PDF)

min_severity

string

"LOW"

Minimum severity to include

format

string

"html"

html or pdf (needs the [pdf] extra)

compliance_report

Map findings to a compliance framework and report the posture.

Parameter

Type

Default

Description

target_path

string

required

Path to scan

framework

string

"owasp"

owasp, sans, pci, or cis

output_path

string

""

Optional file to write the markdown report

min_severity

string

"LOW"

Minimum severity to include

scan_image

Scan a container image reference for vulnerabilities and secrets (Trivy or Grype).

Parameter

Type

Default

Description

image_ref

string

required

Image reference, e.g. nginx:1.25

scanner_name

string

"trivy"

trivy or grype

min_severity

string

"MEDIUM"

Minimum severity to report

output_format

string

"markdown"

markdown or json

remediate_and_verify

Closed-loop remediation: dry-run a patch, apply it, re-scan, and confirm the finding is gone (rolling the patch back on failure).

Parameter

Type

Default

Description

target_path

string

required

Project root (with a .sast-mcp-cache)

finding_hash

string

required

Hash of the finding to fix

patch

string

required

Unified diff to apply

scanner_name

string

""

Re-scan scanner (default: the finding's scanner)

auto_rollback

bool

true

Revert the patch if verification fails

import_sarif

Ingest an external SARIF file (Snyk, Veracode, CI jobs, …) into the normalized finding pipeline so it joins dedup / baselines / dashboards.

Parameter

Type

Default

Description

target_path

string

required

Project root the results belong to

sarif_path

string

required

Path to a SARIF 2.1.0 file

scanner_name

string

"external"

Source scanner name to record

save

bool

true

Cache the imported findings

triage_finding

Get an exploitability/false-positive assessment prompt, or record a CycloneDX VEX decision (suppressing dispositions also add the finding to the ignore-list).

Parameter

Type

Default

Description

target_path

string

required

Project root (with a .sast-mcp-cache)

finding_hash

string

required

Hash of the finding to triage

disposition

string

""

exploitable, not_affected, false_positive, resolved, in_triage (empty = return a prompt)

justification

string

""

Rationale / CycloneDX justification keyword

comment_on_pr

Post a security summary on a GitHub PR or GitLab merge request. Requires GITHUB_TOKEN or GITLAB_TOKEN (+ optional GITLAB_URL).

Parameter

Type

Default

Description

provider

string

required

github or gitlab

repo

string

required

owner/name (GitHub) or project ID/path (GitLab)

pr_number

int

required

PR number / MR IID

body

string

required

Markdown comment body

notify_slack / notify_teams

Send a notification to a Slack or Microsoft Teams incoming webhook (SLACK_WEBHOOK_URL / TEAMS_WEBHOOK_URL).

create_jira_issue

Open a Jira issue for a finding. Requires JIRA_URL, JIRA_EMAIL, JIRA_API_TOKEN.

Parameter

Type

Default

Description

project_key

string

required

Jira project key (e.g. SEC)

summary

string

required

Issue title

description

string

required

Issue description

issue_type

string

"Bug"

Jira issue type

Tip: scan_vulnerabilities, scan_all, and scan_git_history accept output_format="json" for machine-readable results in CI/agent pipelines.

Auth: On HTTP transports every tool is scope-gated — scan:read (scans, reports, exports), scan:write (baselines, patches, uploads, notifications), config:write (ignore list). Set SAST_MCP_JWT_SECRET and issue scoped JWTs.


SARIF / CI/CD Integration

Export scan results in SARIF 2.1.0 format for integration with CI/CD platforms:

# In your CI pipeline, use the MCP tool:
# export_sarif(target_path=".", scanner_name="semgrep", output_path="results.sarif")

# Then upload to GitHub Code Scanning:
# gh api /repos/{owner}/{repo}/code-scanning/sarifs -f sarif=@results.sarif

Compatible with: GitHub Code Scanning, GitLab SAST, Azure DevOps, VS Code SARIF Viewer.


Remote Deployment (Streamable HTTP)

For remote or cloud-hosted deployments, the 2026 MCP standard uses Streamable HTTP.

You can secure the server with JWT Bearer Authentication by setting a secret. Alternatively, for backward compatibility, you can use a static API key.

# Set JWT secret for secure authentication
export SAST_MCP_JWT_SECRET="your_hmac_sha256_secret"

# Or use the legacy API key method
export SAST_MCP_API_KEY="your_secure_api_key_here"

# Start the server with streamable-http transport
uv run sast-mcp-server --transport streamable-http --port 8080 --host 0.0.0.0

Note: The old sse transport is deprecated. Please migrate to streamable-http.

Core Workflows

1. Unified Vulnerability Scanning

Run any of the installed scanners individually (scan_vulnerabilities(scanner_name="bandit")) or run all of them at once using scan_all.

2. Deep Secret & Dynamic Scanning

Use scan_git_history to find API keys leaked years ago, or run_active_scan to spin up your application with Docker Compose and test it dynamically with OWASP ZAP.

3. Baseline & Trend Tracking

Save a scan as a named baseline and compare future scans against it to track new vulnerabilities, fixed issues, and severity trends over time.

  • save_baseline(target_path=".", tag="main")

  • compare_baseline(target_path=".", tag="main")

4. CI/CD Integration

Export scan results to SARIF format (export_sarif) to integrate with GitHub Code Scanning, GitLab SAST, or any other SARIF-compatible platform.

5. MCP Prompts (Security Workflows)

Pre-built security workflows that guide AI agents:

  • security_review: Full codebase assessment

  • fix_vulnerability: Focused remediation advisor

  • pr_security_check: Scan only git diffs and enforce a severity gate

  • compliance_report: Generate an OWASP Top 10 or PCI-DSS report

6. MCP Resources (Security Dashboards)

Read-only contextual data for AI agents without running a full scan:

  • sast://dashboard/{path}: Security posture dashboard

  • sast://config: Server configuration and status

  • sast://scanners: Available scanners and languages

  • sast://cache/{path}/latest: Latest scan results metadata

7. Dashboard Upload & AI-Assisted Remediation

Push SARIF results to external platforms and remediate findings with agent-written patches:

  • upload_to_defectdojo / upload_to_github: Push a SARIF export to a dashboard

  • generate_fix_prompt: Build an LLM-ready prompt for a specific finding

  • apply_patch: Apply the resulting unified diff via git apply

Docker

Pre-built images are published to GHCR on every release:

docker pull ghcr.io/skyrxin/sast-mcp-server:full       # 9 scanners (recommended)
docker pull ghcr.io/skyrxin/sast-mcp-server:minimal    # bandit, njsscan, bearer

# Run as an HTTP server
docker run -p 8080:8080 -e SAST_MCP_JWT_SECRET=your-secret \
  ghcr.io/skyrxin/sast-mcp-server:full --transport streamable-http

# …or use the bundled compose file (exposes /health /ready /metrics too)
docker compose up

Prefer to build locally?

docker build -t sast-mcp-server .                       # minimal
docker build -f Dockerfile.full -t sast-mcp-server:full .   # full

CodeQL and OWASP ZAP are not bundled in the image — CodeQL ships a multi-GB bundle (mount at runtime) and ZAP's run_active_scan orchestrates Docker on the host.


Reliability

"Production-ready" isn't a slogan here — it's measured in CI on every push:

  • 226 tests, 74% line coverage (Codecov), green across Python 3.10–3.13, with mypy type-checking enforced.

  • Self-scan, every build. The server runs its own scanners against its own code in CI; the SARIF + summary are published as the self-scan-report artifact. A snapshot lives in examples/self-scan/.

  • Load-tested HTTP transport. scripts/loadtest.py runs in CI against the Streamable HTTP server: a local run sustains ~210 req/s at p95 ≈ 290 ms with zero failures across /health, /ready, /metrics under 30 concurrent workers.

  • Ops endpoints/health (liveness), /ready (cached scanner inventory, 503 when none installed), /metrics (Prometheus text).

  • Bounded under load — a configurable concurrency cap (SAST_MCP_MAX_CONCURRENT_SCANS) around subprocess scanners, per-client token-bucket rate limiting (SAST_MCP_RATE_LIMIT_PER_MIN) for HTTP transports, per-scanner timeouts, and an optional incremental-scan cache.

Run the load test yourself:

python scripts/loadtest.py --requests 2000 --concurrency 50

Configuration

Environment Variables

Variable

Default

Description

SAST_MCP_TIMEOUT

300

Scan timeout in seconds

SAST_MCP_LOG_LEVEL

INFO

Log level: DEBUG, INFO, WARNING, ERROR

SAST_MCP_CACHE_TTL

86400

Cache time-to-live in seconds (non-tagged scans)

SAST_MCP_CACHE_MAX_SCANS

200

Max non-tagged cached scans to retain (0 = unlimited)

SAST_MCP_HTTP_RETRIES

3

Retry attempts for integration HTTP calls

SAST_MCP_HTTP_TIMEOUT

60

Per-request timeout (s) for integration HTTP calls

SAST_MCP_MAX_CONCURRENT_SCANS

8

Max subprocess scanners running at once (0 = unlimited)

SAST_MCP_RATE_LIMIT_PER_MIN

0

Per-client request budget for HTTP transports (0 = disabled)

SAST_MCP_SCANNER_TIMEOUTS

(none)

JSON map of per-scanner timeout overrides, e.g. {"trivy":600}

SAST_MCP_API_KEY

(none)

API key for remote (HTTP) authentication

SAST_MCP_JWT_SECRET

(none)

HMAC-SHA256 secret for JWT bearer auth (scopes enforced per tool)

DEFECTDOJO_URL

(none)

Base URL of a DefectDojo instance (for upload_to_defectdojo)

DEFECTDOJO_API_KEY

(none)

DefectDojo API v2 token

GITHUB_TOKEN

(none)

Token with security_events: write (SARIF upload + PR comments)

GITLAB_TOKEN

(none)

GitLab token with api scope (for comment_on_pr)

GITLAB_URL

https://gitlab.com

GitLab base URL (self-managed override)

SLACK_WEBHOOK_URL

(none)

Slack incoming webhook (for notify_slack)

TEAMS_WEBHOOK_URL

(none)

Microsoft Teams incoming webhook (for notify_teams)

JIRA_URL / JIRA_EMAIL / JIRA_API_TOKEN

(none)

Jira Cloud credentials (for create_jira_issue)

Operational endpoints (HTTP transports)

When running with --transport streamable-http, the server exposes:

Endpoint

Purpose

GET /health

Liveness probe — 200 with version while the process is up

GET /ready

Readiness probe — lists installed scanners (503 if none)

GET /metrics

Prometheus text exposition (tool calls, scan durations, findings)

Incremental scans

scan_vulnerabilities and scan_all accept use_cache=true: the server fingerprints the target's files and reuses the previous scan when nothing has changed, so repeated scans in a session are fast.


Development

# Clone and install with dev dependencies
git clone https://github.com/Skyrxin/sast-mcp-server.git
cd sast-mcp-server
pip install -e ".[dev]"

# Run tests
pytest tests/ -v

# Lint
ruff check sast_mcp_server/

# Run locally
python -m sast_mcp_server

Project Structure

sast_mcp_server/
├── __init__.py          # Package version
├── __main__.py          # python -m entry point
├── server.py            # FastMCP server with all tools + /health /ready /metrics
├── models.py            # Typed data models (Finding, Severity, etc.)
├── config.py            # Central validated settings (env-driven)
├── sarif.py             # SARIF 2.1.0 export and parsing
├── aggregator.py        # Multi-scanner parallel execution + deduplication
├── cache.py             # Scan caching, baselines, comparison, fingerprints
├── auth.py              # JWT / API key authentication for remote transports
├── metrics.py           # In-process Prometheus metrics
├── ratelimit.py         # Per-client token-bucket rate limiting
├── prompts.py           # MCP prompt templates (security workflows)
├── resources.py         # MCP resources (sast:// dashboards and metadata)
├── scanners/
│   ├── base.py          # Abstract scanner base class
│   ├── factory.py       # Scanner registry and factory
│   ├── bandit.py        # Bandit (Python)
│   ├── njsscan.py       # njsscan (JavaScript)
│   ├── bearer.py        # Bearer (multi-language)
│   ├── semgrep.py       # Semgrep (30+ languages)
│   ├── trivy.py         # Trivy (CVEs, secrets, IaC)
│   ├── codeql.py        # CodeQL (deep semantic SAST)
│   ├── checkov.py       # Checkov (IaC policies)
│   ├── gitleaks.py      # Gitleaks (git history secret scanning)
│   ├── osv_scanner.py   # OSV-Scanner (SCA / dependency CVEs)
│   ├── grype.py         # Grype (SCA + container image scanning)
│   └── zap.py           # OWASP ZAP (DAST via Docker)
├── enrichment/
│   ├── ast_context.py   # AST-aware code context extraction
│   ├── git_diff.py      # Git diff for incremental scanning
│   ├── ignore_manager.py # Finding ignore list management
│   ├── patch_prompt.py  # Builds LLM prompts to fix a cached finding
│   └── patch_apply.py   # Applies/reverts agent-generated diffs via `git apply`
├── reporting/
│   ├── sbom.py          # CycloneDX SBOM/VDR (+ optional Syft inventory)
│   ├── spdx.py          # SPDX 2.3 SBOM
│   ├── vex.py           # CycloneDX VEX statements (triage decisions)
│   ├── html.py          # Standalone HTML executive report
│   ├── pdf.py           # PDF report (optional [pdf] extra)
│   └── compliance.py    # OWASP / SANS / PCI / CIS mapping
└── integrations/
    ├── defectdojo.py    # Upload SARIF to DefectDojo
    ├── github.py        # GitHub Code Scanning + PR comments
    ├── gitlab.py        # GitLab MR comments
    ├── slack.py / teams.py  # Webhook notifications
    └── jira.py          # Create Jira issues

License

MIT

Available Tools

27 tools
apply_patchA

Apply an agent-generated unified diff to files under target_path.

Uses git apply, which refuses paths that escape the target directory. Run with check_only=True first to verify the patch applies cleanly before writing changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesDirectory the patch paths are relative to.
patchYesThe unified diff text to apply.
check_onlyNoIf True, validate without modifying any files.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description informs that git apply is used and refuses paths escaping target directory, which is a key safety behavior. Covers destructive nature implicitly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each adding value: purpose, safety mechanism, usage recommendation. No superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (3 parameters, straightforward behavior), the description is complete: explains what, how (git apply), safety check, and options.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and description adds minimal additional meaning beyond schema descriptions. Slightly rephrases schema but does not add new constraints or examples.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool applies a unified diff to files under target_path using git apply. It specifies the verb 'apply' and resource, and no sibling tool performs similar function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly recommends using check_only=True first to verify the patch applies cleanly before writing changes, providing a clear workflow guideline. Does not mention when not to use, but siblings are distinct.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

comment_on_prA

Post a security summary comment on a GitHub PR or GitLab merge request.

Credentials come from environment variables only: GITHUB_TOKEN for GitHub, or GITLAB_TOKEN (+ optional GITLAB_URL) for GitLab.

ParametersJSON Schema
NameRequiredDescriptionDefault
providerYes'github' or 'gitlab'.
repoYesFor GitHub, 'owner/name'. For GitLab, the numeric project ID or URL-encoded 'group/project' path.
pr_numberYesPR number (GitHub) or merge request IID (GitLab).
bodyYesMarkdown comment body (e.g. a scan summary or gate result).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It discloses the action (posting a comment) and authentication method (env vars), but does not detail behavior on failure, idempotency, or whether it replaces existing comments. Basic behavior is clear but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two efficient sentences: one for purpose and one for credential setup. No extraneous text, front-loaded with the primary action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has 4 required parameters and an output schema (present but not shown). The description covers the credential setup, which is critical for usage. It could mention return value or error handling, but overall it is reasonably complete for a simple posting tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains all four parameters. The description does not add meaning beyond the schema, justifying the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Post' and clearly identifies the resource: 'security summary comment on a GitHub PR or GitLab merge request'. This distinguishes it from sibling notification tools (e.g., notify_slack) which target different platforms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions credential setup (environment variables) which is essential for using the tool, but does not explicitly state when to prefer this tool over alternatives like notify_slack or notify_teams. The guidance is implied via the platform-specific context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compare_baselineA

Compare current scan results against a saved baseline.

Shows new vulnerabilities, fixed vulnerabilities, and severity trends.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to the directory to scan.
tagNoThe baseline tag to compare against. Defaults to 'latest'.latest
scanner_nameNoScanner to use. Defaults to 'bearer'.bearer
min_severityNoMinimum severity (LOW, MEDIUM, HIGH, CRITICAL).LOW
min_confidenceNoMinimum confidence (LOW, MEDIUM, HIGH).LOW

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It only states the action and output, failing to disclose behavioral traits like required permissions, rate limits, or behavior when no baseline exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with core action, no unnecessary words. Efficient and to the point.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return value explanation is unneeded. However, description omits prerequisites (e.g., baseline must exist) and behavioral context, leaving gaps for a 5-parameter tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all parameters. The tool description adds no additional parameter semantics beyond the overall purpose, so baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb (compare), resource (scan results against baseline), and output details (new, fixed, severity trends). It distinguishes from sibling 'save_baseline' which saves rather than compares.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage after a baseline is saved but provides no explicit when-to-use or when-not-to-use guidance. It does not mention prerequisites or alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

compliance_reportB

Map findings to a compliance framework and report the posture.

Buckets all findings against OWASP Top 10, SANS CWE Top 25, PCI DSS, or CIS using each finding's CWE / OWASP metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to scan.
frameworkNo'owasp' (default), 'sans', 'pci', or 'cis'.owasp
output_pathNoOptional path to write the markdown report.
min_severityNoMinimum severity to include.LOW

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It explains the mapping uses CWE/OWASP metadata but does not disclose whether the tool is read-only, whether it modifies data, or any required permissions. Adequate but has gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose, and contains no unnecessary words. Every part adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and the description covers the main action and frameworks, it is fairly complete. However, it omits prerequisites like the existence of scan findings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing a baseline of 3. The description adds context about framework mapping using CWE/OWASP metadata, but does not further elaborate on parameter meanings or constraints beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool maps findings to a compliance framework and reports posture, listing specific frameworks (OWASP, SANS, PCI, CIS). However, it does not explicitly differentiate from sibling tools like 'generate_report'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as 'evaluate_policy' or 'generate_report'. It lacks explicit context on prerequisites or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_jira_issueB

Open a Jira issue for a security finding.

Requires the JIRA_URL, JIRA_EMAIL, and JIRA_API_TOKEN environment variables.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_keyYesThe Jira project key (e.g. 'SEC').
summaryYesIssue title.
descriptionYesIssue description (plain text).
issue_typeNoJira issue type name (default 'Bug').Bug

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It mentions environment variable dependencies but fails to disclose whether the operation is idempotent, what side effects occur (e.g., creating a Jira ticket, triggering notifications), or error handling behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states the purpose, second notes prerequisites. Front-loaded, no redundant information. Every word adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite the presence of an output schema, the description does not mention what the tool returns (e.g., issue key or URL). There is no context on rate limits, authentication scope, or typical use cases. Sibling tools are not differentiated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the schema; parameters are already documented with examples (e.g., 'SEC' for project_key). No extra details on format, constraints, or relationships.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Open a Jira issue for a security finding', specifying the verb, resource, and context. This distinguishes the tool from siblings like 'scan_vulnerabilities' or 'export_sarif' which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool vs alternatives. It does not specify prerequisites beyond environment variables or indicate situations where other tools (e.g., 'upload_to_defectdojo') might be preferred. The description is purely functional.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

evaluate_policyA

Run all scanners and evaluate findings against a CI security policy.

Returns an explicit PASS/FAIL verdict suitable for gating a pipeline. A threshold of -1 means "no limit" for that severity. When fail_on_new is set, the result also fails if any finding is new relative to the named baseline (created with save_baseline).

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to the directory to scan.
max_criticalNoMax allowed CRITICAL findings (default 0). -1 = unlimited.
max_highNoMax allowed HIGH findings. -1 = unlimited (default).
max_mediumNoMax allowed MEDIUM findings. -1 = unlimited (default).
fail_on_newNoIf true, fail when findings are new vs. the baseline.
baseline_tagNoBaseline tag to diff against when ``fail_on_new`` is set.latest
min_severityNoMinimum severity to include in the scan.LOW
min_confidenceNoMinimum confidence to include in the scan.LOW
output_formatNo'markdown' (default) or 'json' (machine-readable verdict).markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description does well to disclose key behaviors: it runs all scanners, evaluates against a policy, returns a verdict, explains the -1 threshold semantics, and the interaction between 'fail_on_new' and baseline. It does not mention side effects (e.g., data mutation) or authentication requirements, but given the read-only nature implied, it is transparent enough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, front-loaded with the core purpose and outcome. Each sentence contributes unique information: first the general action and result, second the threshold semantics, third the special fail_on_new behavior. No redundant or irrelevant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the context signals (9 parameters, 100% coverage, output schema exists), the description is sufficiently complete. It explains the return format (PASS/FAIL), the threshold mechanism, and the baseline condition. Some edge cases (e.g., what if no scanners are enabled?) are not covered, but the overall picture is adequate for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters have individual descriptions. The description adds value by explaining the -1 threshold meaning and the condition when 'fail_on_new' causes failure relative to a baseline. This connects parameters like 'fail_on_new' and 'baseline_tag' beyond what the schema provides individually.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs all scanners and evaluates findings against a CI security policy, returning an explicit PASS/FAIL verdict for pipeline gating. It uses specific verbs ('run', 'evaluate') and identifies the resource ('scanners', 'CI security policy'). It distinguishes from sibling tools like 'scan_all' which only scans or 'compliance_report' which likely just generates reports.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions the threshold behavior ('-1 means no limit') and the 'fail_on_new' option with baseline reference. However, it does not explicitly state when to use this tool versus alternatives like 'scan_all' or 'compliance_report', nor does it provide context on when not to use it. The mention of 'save_baseline' is a cross-reference but not a usage guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_sarifA

Run a SAST scan and export results in SARIF 2.1.0 format for CI/CD integration.

SARIF is the industry standard format consumed by GitHub Code Scanning, GitLab SAST, Azure DevOps, and other CI/CD platforms.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to the directory or file to scan.
scanner_nameNoThe scanner to use ('bandit', 'njsscan', 'bearer', 'semgrep', 'trivy', 'codeql', 'checkov'). Defaults to 'bearer'.bearer
min_severityNoMinimum severity to report (LOW, MEDIUM, HIGH, CRITICAL).LOW
min_confidenceNoMinimum confidence to report (LOW, MEDIUM, HIGH).LOW
output_pathNoOptional path to write the SARIF file. If empty, returns the SARIF JSON as a string.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that the tool runs a scan and exports results, but does not mention potential side effects, authentication requirements, rate limits, or whether the scan is destructive. The description adds context about SARIF format but lacks behavioral details beyond the basic operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no waste. First sentence states the core action, second adds valuable context about SARIF format and integration platforms. Efficiently structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, schema coverage is 100%, and the description explains the output format (SARIF) and CI/CD integration purpose. However, it lacks guidance on when to prefer this tool over siblings like import_sarif or other scan tools. Overall, it is adequate for the given complexity and structured fields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Input schema has 100% description coverage for all 5 parameters. The description does not add parameter-specific details beyond what the schema provides, except for the context about SARIF being an industry standard. Baseline score of 3 is appropriate since schema already documents parameters adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool runs a SAST scan and exports results in SARIF 2.1.0 format for CI/CD integration. The verb 'run a SAST scan and export' with the specific resource 'SARIF format' distinguishes it from siblings like import_sarif or other scan-only tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions usage for CI/CD integration and lists common platforms (GitHub Code Scanning, GitLab SAST, Azure DevOps). However, it does not provide when-not-to-use guidance or compare to alternatives like import_sarif or other scan tools. The context is clear but exclusions are missing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

export_sbomA

Run all scanners and export an SBOM / vulnerability report.

Produces the supply-chain artifact enterprises expect. In CycloneDX mode, if Syft is installed the component inventory is the full dependency list (not just vulnerable packages); otherwise components are derived from findings. SPDX mode emits an SPDX 2.3 document.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to scan.
output_pathNoFile path to write the SBOM (empty = return inline).
min_severityNoMinimum severity to include.LOW
sca_onlyNoInclude only dependency (SCA) findings (default). Set False to include every finding as a vulnerability entry.
formatNo'cyclonedx' (default) or 'spdx'.cyclonedx

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden. It discloses behavioral details: CycloneDX vs SPDX output, dependency on Syft for full dependency lists, and derivation from findings otherwise. However, it doesn't state if the tool is read-only or modifies state, nor any authentication needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded. The first sentence captures the core purpose, and the following sentences add essential details without redundancy. Every sentence earns its place, making it efficient for an AI agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given tool complexity (5 params, output schema exists), the description covers key behaviors: output formats, Syft dependency, and fallback behavior. It omits potential side effects (e.g., time to run all scanners) but is largely complete. The output schema compensates for missing return value details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds value by explaining the format parameter's behavior difference (CycloneDX with/without Syft). This goes beyond the schema's brief 'cyclonedx or spdx' and provides meaningful context for agent decisions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool exports an SBOM/vulnerability report after running all scanners. It specifies the resource (SBOM) and action (export), and distinguishes between CycloneDX and SPDX modes. This makes the purpose specific and distinct from siblings like 'export_sarif' or 'compliance_report'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when an SBOM is needed but lacks explicit guidance on when to use this tool versus alternatives (e.g., 'export_sarif', 'compliance_report'). It doesn't mention prerequisites like scanner installation or provide when-not-to-use scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_fix_promptA

Build an LLM-ready prompt to fix a cached finding as a unified diff.

Recovers the finding (by hash) from the scan cache, extracts an expanded window of the vulnerable source, and returns a prompt engineered to make an LLM emit a strict unified diff. After generating the patch, apply it with apply_patch.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesRoot of the scanned project (must have a `.sast-mcp-cache`).
finding_hashYesHash of the finding to remediate (shown in scan output).
context_windowNoSource lines to include before/after the finding.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses the core behavior: recovering a finding from cache, extracting a source window, and returning a prompt for a unified diff. It doesn't cover all behavioral aspects like side effects or error conditions, but it provides sufficient context for safe invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with three sentences, front-loading the main purpose. Every sentence adds meaningful context without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the three parameters and existence of an output schema, the description is adequate. It explains the workflow and prerequisites (scan cache). The output schema exists but is not detailed, which is acceptable as per rules. Some information about the output format could add completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining that target_path requires a '.sast-mcp-cache' directory, finding_hash comes from scan output, and context_window specifies lines before/after. This goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool builds an LLM-ready prompt to fix a cached finding as a unified diff, specifying the source recovery and output format. It distinguishes from sibling 'apply_patch' by indicating the patch should be applied after generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for generating a fix prompt before applying, referencing 'apply_patch'. However, it does not explicitly state when to use this tool versus other remediation or scanning tools, nor does it exclude alternative approaches.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_reportA

Run all scanners and render an executive security report (HTML or PDF).

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to scan.
output_pathNoFile path to write the report (empty = return inline HTML; required for PDF since it is binary).
min_severityNoMinimum severity to include.LOW
formatNo'html' (default) or 'pdf'. PDF requires the optional [pdf] extra (`pip install "sast-mcp-server[pdf]"`).html

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool runs all scanners before rendering, which is helpful, but lacks details on whether it modifies state, required permissions, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence that is concise and front-loaded with the core action and output format. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema and 4 params, the description adequately covers purpose and format options. It could mention prerequisites like scanner configuration, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the description adds minimal value beyond the schema. It restates that format can be HTML or PDF, which is already in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs all scanners and renders an executive security report in HTML or PDF. It distinguishes from sibling tools like 'scan_all' which only scans without generating a report.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use after scanning but does not explicitly state when to use this tool versus alternatives like 'compliance_report' or 'export_sarif'. No exclusion criteria or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ignore_vulnerabilityB

Ignore a specific vulnerability finding so it won't appear in future scans.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe root directory of the project (where .sast-mcp-ignore.json lives).
finding_hashYesThe unique hash of the finding to ignore (shown in scan results).
reasonNoOptional justification for ignoring the vulnerability.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden for behavioral disclosure. It only states the high-level effect without explaining side effects (e.g., file modifications), permission requirements, reversibility, or impact on future scans.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, clear sentence that efficiently conveys the tool's purpose. It is front-loaded and contains no unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite modest complexity (3 parameters, no nested objects), the description lacks context about the expected output, confirmation of the ignore operation, or how it interacts with sibling tools. The existence of an output schema is noted but not described.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters with 100% description coverage, so the description adds no extra meaning beyond summarizing the tool's action. Baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Ignore a specific vulnerability finding') and its effect ('so it won't appear in future scans'). It distinguishes from siblings like 'unignore_vulnerability' by specifying the suppression of results.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case (suppressing findings) but does not explicitly state when to use versus alternatives like 'triage_finding' or 'unignore_vulnerability'. No exclusions or contextual cues are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

import_sarifA

Ingest an external SARIF file into the normalized finding pipeline.

Lets results from any SARIF-producing tool (Snyk, Veracode, CodeQL, a CI job, etc.) join the same dedup / baseline / dashboard flow as native scans. The findings are re-enriched with AST context and stable hashes on import.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesProject root the SARIF results belong to (for caching).
sarif_pathYesPath to a SARIF 2.1.0 JSON file.
scanner_nameNoName to record as the source scanner (default 'external').external
saveNoCache the imported findings so compare_baseline / dashboards see them (default True).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It mentions re-enrichment and stable hashes, but does not disclose potential side effects (e.g., idempotency, overwrite behavior, network requirements). Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two clear sentences (with a bullet-like second line) that front-load the primary purpose and then add value with context about the pipeline. No redundancy, but the enrichment detail could be integrated more smoothly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (though not shown), and high schema coverage, the description covers purpose, use case, and processing details. It lacks prerequisites or error handling, but is fairly complete for a data import tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with each parameter having a concise description. The tool description adds little to parameter semantics beyond stating the overall pipeline flow. Baseline 3 is appropriate as the schema already does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Ingest an external SARIF file into the normalized finding pipeline' – a specific verb+resource. It clearly distinguishes from sibling tools like export_sarif and scan_* commands by focusing on importing external results. The usage context is explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains that the tool allows results from any SARIF-producing tool to join native flows, which implies when to use (external SARIF ingestion). It does not explicitly state when not to use or list alternatives, but the context is clear enough for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_ignored_vulnerabilitiesB

List all currently ignored vulnerability findings for a project.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe root directory of the project.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It mentions 'currently ignored' but does not explicitly state that the tool is read-only, safe, or that no changes are made. It lacks details on authentication requirements or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no unnecessary words. It is front-loaded and direct.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (one parameter, output schema present), the description is adequate but minimal. It does not explain the return format, pagination, or any filtering behavior beyond 'currently ignored'. Slightly more context would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The tool description does not add any additional semantic information beyond what the schema already provides for the 'target_path' parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'list' and the resource 'ignored vulnerability findings for a project'. It distinguishes the tool from sibling tools like 'ignore_vulnerability' and 'unignore_vulnerability'. However, it could be more specific about the scope and that it is read-only.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like scanning or triage tools. The description does not provide any prerequisites, examples, or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_scannersA

List all available SAST scanners, their status, and supported languages.

Returns information about each scanner including whether it is installed and ready to use, what languages it supports, and how to install it.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully carries the transparency burden. It accurately describes a read-only operation with no side effects, detailing what information is returned (installed status, supported languages, installation instructions).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at two sentences, with the main purpose in the first sentence. Minor improvement could be trimming 'Returns information about each scanner including' but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple operation (no parameters, expected output schema present), the description adequately covers what the tool returns. The mention of installed status, languages, and installation instructions is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, so the schema coverage is 100% by default. The description adds no parameter info, but the baseline score for 0 params is 4. Given the clarity of the output, a 5 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists all available SAST scanners, their status, and supported languages. This distinctively separates it from sibling tools that perform scans or manage vulnerabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

While no explicit 'when to use' vs alternatives is provided, the context implies use for discovering available scanners before selecting one. Since there are no similar listing siblings, the purpose is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notify_slackA

Send a notification to the configured Slack incoming webhook.

Requires the SLACK_WEBHOOK_URL environment variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe message text (Slack mrkdwn supported).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description lacks disclosure of side effects, rate limits, error behavior, or output format. Only mentions the action and a configuration requirement.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action. Every sentence provides necessary information without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple notification tool with one parameter and an output schema, the description covers the main requirement and action. Could mention that the webhook must be correctly configured, but overall adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the parameter description in the schema is clear. The tool description does not add additional meaning beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb (send a notification) and resource (Slack incoming webhook). Distinguishes from sibling tools like notify_teams by specifying the platform.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Specifies a prerequisite (SLACK_WEBHOOK_URL environment variable) but does not explain when to use this tool versus alternatives like notify_teams or other notification methods.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

notify_teamsA

Send a notification to the configured Microsoft Teams incoming webhook.

Requires the TEAMS_WEBHOOK_URL environment variable.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe message body (Markdown supported).
titleNoCard title.SAST Security Notification

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided; description only states the primary action without detailing side effects, idempotency, error handling, or any behavioral traits beyond sending a notification.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no wasted words, and the key information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple but lacks mention of return values (output schema exists), failure behavior, or confirmation. Adequate for a straightforward notification but could be improved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and descriptions already cover meaning. The tool description adds no additional semantic value beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action ('Send a notification') and target ('Microsoft Teams incoming webhook'), distinguishing it from sibling tools like notify_slack.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions a prerequisite (TEAMS_WEBHOOK_URL environment variable) but gives no explicit guidance on when to use vs. alternatives or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remediate_and_verifyA

Apply a fix and prove it worked: scan → patch → re-scan → confirm gone.

The closed remediation loop. Recovers the finding by hash, dry-runs the patch, re-scans the affected file before and after applying it, and returns PASS only if the finding's hash disappears and no new finding of equal or higher severity is introduced. On failure (and when auto_rollback), the patch is reverted so the working tree is left clean.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesRoot of the scanned project (with a `.sast-mcp-cache`).
finding_hashYesHash of the finding to fix (from earlier scan output).
patchYesThe unified diff to apply (e.g. produced via generate_fix_prompt).
scanner_nameNoScanner to re-scan with. Defaults to the finding's originating scanner, falling back to all scanners.
auto_rollbackNoRevert the patch if verification fails (default True).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses the full process: scan, dry-run, re-scan before/after, PASS conditions, and auto-rollback behavior. The only omission is potential side effects like file locking, but it clearly states the working tree is left clean.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is ~100 words, front-loaded with the core action, and each sentence adds value. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be detailed. The description covers the remediation loop fully, including failure handling. For a parameter-heavy tool, it is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3). The description adds value by explaining the purpose of auto_rollback and noting that patch can be produced via generate_fix_prompt. It also clarifies scanner_name fallback behavior. A 4 is appropriate for the extra context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Apply a fix and prove it worked: scan → patch → re-scan → confirm gone.' This verb+resource summary distinguishes it from siblings like apply_patch by emphasizing the verification loop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through 'The closed remediation loop' and details about recovery, dry-run, and re-scan. However, it does not explicitly contrast with siblings or state when not to use, so a slight deduction from perfect.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

run_active_scanA

Run an active dynamic scan (DAST) using OWASP ZAP.

Unlike SAST which only looks at code, this orchestrates spinning up the application via Docker Compose, waiting for it to be ready, and then running a ZAP dynamic baseline scan against the running instance.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesPath to the directory containing the docker-compose file.
docker_compose_fileYesThe name of the docker-compose file (e.g. docker-compose.yml).
target_urlYesThe URL of the target application once it's up (e.g. http://localhost:8080).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. It discloses orchestration steps (Docker Compose, waiting, ZAP scan) but omits potential impact on running instances, permissions needed, or rate limits. Adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise paragraphs, front-loaded with key action and contrast. Every sentence adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complex tool with three parameters and an output schema. Description covers the main process but could mention prerequisites like Docker installation or non-destructive nature. Mostly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions. Description adds no extra meaning beyond the schema; baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb 'Run an active dynamic scan (DAST)' specifies resource (DAST/OWASP ZAP) and action. Contrasts with SAST and sibling tools, distinguishing its purpose effectively.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Description states it's for DAST vs SAST, providing context. However, it does not explicitly list when not to use or name alternatives, though the sibling list offers implicit choices.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_baselineB

Run a scan and save the results as a named baseline for future comparison.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to the directory to scan.
tagNoA name for this baseline (e.g., 'main', 'pre-release'). Defaults to 'latest'.latest
scanner_nameNoScanner to use, or 'scan_all' to baseline the deduplicated results of every installed scanner (recommended for policy gating with `evaluate_policy(fail_on_new=True)`). Defaults to 'bearer'.bearer
min_severityNoMinimum severity to include (LOW, MEDIUM, HIGH, CRITICAL).LOW
min_confidenceNoMinimum confidence to include (LOW, MEDIUM, HIGH).LOW

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full responsibility for behavioral disclosure. It fails to mention that running 'save_baseline' with the same 'tag' will overwrite an existing baseline, or whether the scan results are persisted beyond the current session. The impact on system state is unclear. The description only states the action without side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that is front-loaded with the action. It is concise without filler. However, it could be structured to include a brief note on usage context, but remains above average.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description does not need to explain return values. The description is adequate for a tool with 5 parameters all described. However, a mention that the saved baseline can be used with 'compare_baseline' would improve completeness. Still, it covers the core functionality.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (all 5 parameters are described in the schema). The description does not add any extra meaning beyond the schema, meeting the baseline expectation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool runs a scan and saves results as a named baseline for future comparison. It uses specific verbs 'run a scan' and 'save', and the resource 'baseline'. This distinguishes it from sibling scanning tools like 'scan_all' and 'run_active_scan' which do not save baselines, and from 'compare_baseline' which compares existing baselines.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention that this tool is appropriate for establishing a baseline for later comparison with 'compare_baseline', nor does it exclude scenarios where a simple scan without saving is needed. No exclusion criteria or alternative tool references are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_allA

Scan with ALL installed scanners in parallel, returning deduplicated results.

Automatically detects which scanners are installed, runs them concurrently, and deduplicates findings across scanners using content-based hashing. This is the recommended tool for comprehensive security scanning.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to the directory or file to scan.
min_severityNoMinimum severity to report (LOW, MEDIUM, HIGH, CRITICAL). Defaults to MEDIUM to reduce noise from multiple scanners.MEDIUM
min_confidenceNoMinimum confidence to report (LOW, MEDIUM, HIGH).LOW
git_diff_onlyNoIf true, only reports findings in files modified in git diff.
limitNoMaximum number of findings to return (for pagination).
offsetNoPagination offset.
output_formatNo'markdown' (human-readable, default) or 'json' (machine-readable list of findings for agents / CI).markdown
use_cacheNoIf true, reuse the last cached scan_all when the target's files are unchanged (incremental scan). Ignored with git_diff_only.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses parallel execution, automatic scanner detection, and content-based deduplication. Lacks details on caching or nondestructive nature, but parameter descriptions cover some gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with core action, no superfluous words. Efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main functionality, parallelism, deduplication, and recommendation. With output schema present, return values are documented. Missing some details like caching behavior or prerequisites, but sufficient for a scan tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with thorough parameter descriptions. Tool description adds no new parameter-specific meaning beyond overall purpose. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description uses specific verb 'scan', resource 'ALL installed scanners', and outcome 'deduplicated results'. Clearly distinguishes from sibling tools like scan_git_history or scan_image by being comprehensive.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States 'This is the recommended tool for comprehensive security scanning', implying use for broad scans. Does not explicitly list when to avoid or alternatives, but context with sibling tools makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_git_historyA

Scan the entire git history for leaked secrets and credentials using Gitleaks.

Traditional SAST only scans the current state of files. This tool deeply analyzes the .git directory to find API keys, passwords, and tokens that were committed in the past but may still be valid.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathNoPath to the repository root (must contain a .git directory)..
min_severityNoMinimum severity threshold (defaults to LOW).LOW
output_formatNo'markdown' (human-readable, default) or 'json' (machine-readable list of findings for agents / CI).markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses using Gitleaks, analyzing .git directory, and finding API keys/passwords/tokens. However, it omits potential side effects like performance impact, required dependencies, or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise at 4 sentences, front-loaded with the main action, and efficiently contrasts with traditional SAST without unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description explains the tool's purpose and value well. Given the existence of output schema and full parameter documentation, it is reasonably complete, though a note on prerequisites (e.g., Git installed) would improve it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameters are already documented. The description adds no additional meaning to parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it scans git history for leaked secrets using Gitleaks, and distinguishes it from traditional SAST that scans current files. Among sibling tools like scan_image or scan_vulnerabilities, this is uniquely focused on git history secrets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use (to find past committed secrets missed by SAST) and contrasts with traditional SAST. It does not explicitly state when not to use or name alternative tools, but the context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_imageB

Scan a container image for vulnerabilities and secrets.

Pulls and analyzes a container image reference (e.g. nginx:1.25, ghcr.io/org/app@sha256:...) with Trivy or Grype, returning the same normalized findings as a source scan.

ParametersJSON Schema
NameRequiredDescriptionDefault
image_refYesThe image reference to scan.
scanner_nameNo'trivy' (default) or 'grype'.trivy
min_severityNoMinimum severity to report (LOW, MEDIUM, HIGH, CRITICAL).MEDIUM
output_formatNo'markdown' (default) or 'json'.markdown

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full responsibility. It discloses that the tool pulls and analyzes images, implying network usage, but does not detail potential side effects like large data transfers, authentication needs, or performance impact. The read-only nature is not explicitly confirmed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, front-loaded with the main purpose, and uses clear language. Every sentence adds value without redundancy. It is well-structured and easy to read.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a scanning tool with an output schema, the description mentions the normalized findings format, which partially covers output. However, it does not address potential failures (e.g., image not found, pull errors), time/network costs, or how it differs from sibling tools like scan_all. This leaves gaps for an AI agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, providing baseline 3. The description adds context for the image_ref parameter with example formats (e.g., nginx:1.25) and explains the tool's purpose container-specific, but other parameters like scanner_name and min_severity are adequately covered by schema descriptions. The added value is marginal.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool scans container images for vulnerabilities and secrets, uses Trivy/Grype, and returns normalized findings. It specifies the resource (container image) and the action (scan, pull, analyze). However, it does not explicitly distinguish itself from sibling tools like scan_all or scan_vulnerabilities, which may have overlapping scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or specific use cases. An agent would have to infer usage context from the tool name and examples alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

scan_vulnerabilitiesC

Scan a target directory for security vulnerabilities using a SAST tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe absolute path to the directory or file to scan.
scanner_nameNoThe scanner to use ('bandit', 'njsscan', 'bearer', 'semgrep'). Defaults to 'bearer'.bearer
min_severityNoMinimum severity to report (LOW, MEDIUM, HIGH, CRITICAL).LOW
min_confidenceNoMinimum confidence to report (LOW, MEDIUM, HIGH).LOW
git_diff_onlyNoIf true, only reports findings in files modified in git diff.
limitNoMaximum number of findings to return (for pagination).
offsetNoPagination offset.
output_formatNo'markdown' (human-readable, default) or 'json' (machine-readable list of findings for agents / CI).markdown
use_cacheNoIf true, reuse the last cached scan when the target's files are unchanged (incremental scan). Ignored when git_diff_only is set.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It only says 'scan' and 'SAST tool', leaving out whether the tool is read-only, requires permissions, or modifies the target.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence, which is concise but lacks structure. It is too brief to convey critical information about the tool's capabilities and limitations.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 9 parameters and many siblings, the description is incomplete. It omits details about prerequisites, scanning behavior, and how results are returned (though output schema exists).

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions. The tool description adds no additional parameter-specific meaning beyond what the schema already provides, meeting the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool scans a directory for vulnerabilities using SAST, but does not differentiate it from sibling tools like scan_all or scan_image that may also scan directories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus alternatives such as scan_all or scan_git_history. The description only implies usage for scanning a specific directory.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

triage_findingA

Triage a finding: get an exploitability prompt, or record a VEX decision.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesRoot of the scanned project (with a `.sast-mcp-cache`).
finding_hashYesHash of the finding to triage.
dispositionNoVEX state keyword (empty = return a triage prompt instead).
justificationNoRationale (CycloneDX justification keyword for not_affected, otherwise free text).

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so the description carries full burden. It discloses two behavioral modes but omits side effects, permissions, or state changes (e.g., recording a VEX decision is a write operation). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Extremely concise single sentence, front-loaded with verb and resource. Could be more structured (e.g., two bullet points) but no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations but presence of output schema, the description covers the tool's two modes. However, it lacks explanation of the exploitability prompt concept and does not discuss return values or prerequisites, leaving gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for all 4 parameters. The description adds context linking disposition/justification to VEX decisions, but does not significantly enrich beyond schema details.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Triage a finding' with two specific modes (get exploitability prompt, record VEX decision). It distinguishes from siblings by focusing on triaging a single finding, unlike scanning or reporting tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use (triage a finding) but provides no explicit guidance on when not to use or alternatives among related siblings like 'ignore_vulnerability' or 'remediate_and_verify'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

unignore_vulnerabilityA

Remove a vulnerability from the ignore list so it appears in future scans again.

ParametersJSON Schema
NameRequiredDescriptionDefault
target_pathYesThe root directory of the project.
finding_hashYesThe unique hash of the finding to unignore.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It accurately states that the vulnerability will reappear in future scans, but it does not disclose required permissions, reversibility, or impact on past scan results.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that efficiently conveys the tool's core function. Every word is necessary, and there is no extraneous information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 required params) and the presence of an output schema, the description covers the essential behavior. However, it may leave some operational details unstated, such as error handling or preconditions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters have schema-level descriptions covering 100% of the properties. The tool description adds no additional explanation for the parameters beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove a vulnerability from the ignore list') and the resulting effect ('so it appears in future scans again'). It distinguishes itself from sibling tools like 'ignore_vulnerability' and 'list_ignored_vulnerabilities' by specifying the inverse operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide explicit guidance on when to use this tool versus alternatives. While the purpose is clear as the inverse of ignore_vulnerability, the description lacks contextual cues or prerequisites for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_to_defectdojoA

Upload a SARIF report to a DefectDojo engagement.

Requires the DEFECTDOJO_URL and DEFECTDOJO_API_KEY environment variables. Generate the SARIF file first with export_sarif(output_path=...).

ParametersJSON Schema
NameRequiredDescriptionDefault
sarif_pathYesPath to a SARIF file produced by `export_sarif`.
engagement_idYesNumeric ID of the target DefectDojo engagement.
activeNoMark imported findings as active.
verifiedNoMark imported findings as verified.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description discloses the action (upload), environment requirements, and prerequisite file generation. Lacks details on side effects (e.g., overwrite behavior, idempotency) but provides basic behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: first states purpose, second gives prerequisites. No extra words, front-loaded with the main action.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers environment setup and a key dependency (export_sarif). Since an output schema exists, return values are not needed. Could mention error scenarios or authentication steps, but is adequate for a straightforward upload tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so description does not need to add much. It reinforces that sarif_path comes from export_sarif and engagement_id is numeric, but adds no new semantic meaning beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool uploads a SARIF report to a DefectDojo engagement, specifying the resource type and target. It distinguishes from siblings like export_sarif (generates) and import_sarif by focusing on uploading to an engagement.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit prerequisite: generate the SARIF file with export_sarif first. Mentions required environment variables. Does not explicitly state when not to use, but the context implies it is only appropriate when you have an engagement ID and a SARIF file.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_to_githubA

Upload a SARIF report to GitHub Code Scanning.

Requires a GITHUB_TOKEN environment variable with security_events: write scope. Generate the SARIF file first with export_sarif(output_path=...).

ParametersJSON Schema
NameRequiredDescriptionDefault
sarif_pathYesPath to a SARIF file produced by `export_sarif`.
repoYesRepository in `owner/name` form.
commit_shaYesFull SHA of the commit the results apply to.
refYesFully qualified ref, e.g. `refs/heads/main`.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must convey behavioral traits. It mentions the required token and that the tool uploads (a write operation). However, it does not disclose potential side effects, rate limits, or confirmation of success/failure. This is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two sentences conveying purpose, prerequisite, and workflow. No wasted words, and the critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 required params, output schema present), the description covers the essential workflow (export first, upload) and prerequisite. It assumes the output schema documents return values, which is acceptable. The only missing part is optional behavior or error scenarios, but overall complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has full description coverage (100%), so each parameter's purpose is already documented. The description adds no extra meaning beyond the schema, mentioning only the token requirement not in the schema. Baseline 3 is appropriate because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Upload a SARIF report') and the target system ('GitHub Code Scanning'), using a specific verb and resource. It differentiates from siblings like 'export_sarif' (which exports locally) and 'import_sarif' (likely different scope).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly notes prerequisites: the GITHUB_TOKEN with required scope and the need to first call export_sarif. This gives clear when-to-use guidance. However, it does not explicitly state when not to use this tool or mention alternative tools like import_sarif.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a clear and distinct purpose. Scanning tools are differentiated by scope (directory, git history, image, DAST, all), and fixing/reporting/integration tools are unique in function.

Naming Consistency3/5

Most tools follow a verb_noun pattern, but there are exceptions like 'compliance_report' (noun_noun) and 'remediate_and_verify' (verb_and_verb), and some include prepositions ('upload_to_defectdojo'). The style is inconsistent but still readable.

Tool Count4/5

27 tools is on the high side but appropriate for a comprehensive SAST server covering scanning, fixing, reporting, integration, baselines, and notifications. Each tool earns its place.

Completeness5/5

The tool surface covers the entire security scanning lifecycle: multiple scan types, fix generation and verification, baselines, compliance mapping, reporting, notifications, and integrations with Jira, Slack, Teams, GitHub, and DefectDojo. No obvious gaps.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Integrates 15+ static application security testing tools (Semgrep, Bandit, TruffleHog, etc.) with Claude Code AI, enabling automated vulnerability scanning and security analysis through natural language commands. Supports cross-platform operation with remote execution on dedicated security VMs.
    6
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Skyrxin/sast-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server