SAST MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SAST MCP Serverscan ./src for high severity vulnerabilities using semgrep"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SAST MCP Server
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 |
Python | Security linter | |
JavaScript, Node.js | Static analysis | |
Python, JS, Ruby, Java, Go, PHP | Data-flow SAST | |
30+ languages | Rule-based SAST | |
All (CVEs, Secrets, IaC, images) | Multi-scanner | |
Python, JS, Java, Go, C/C++, C#, Ruby, Swift | Semantic SAST | |
Terraform, K8s, Docker, CloudFormation | IaC policy scanner | |
All (.git history) | Deep secret scanning | |
Multiple (lockfiles, sboms) | SCA | |
Containers, OS packages, lockfiles, SBOMs | SCA / image scanning | |
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 install —
pip 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.
Option 1 — Full container (recommended: 9 scanners, zero setup)
docker pull ghcr.io/skyrxin/sast-mcp-server:fullBundles 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 /metricsOption 2 — pip extra (4 pip-installable scanners)
pip install "sast-mcp-server[scanners]" # adds bandit, njsscan, semgrep, checkovOption 3 — minimal / custom
pip install sast-mcp-server # server only — bring your own scanners
uvx sast-mcp-server # run without installingThen 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/releasesWhat ships where
Scanner |
|
| 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 ( |
At startup the server logs how many scanners it can actually see (e.g.
Scanners available: 9/11 (...)), and thelist_scannerstool //readyendpoint report the same — so it's always obvious what you have.
Usage with AI Agents
Gemini CLI
Install as an extension:
gemini extensions install https://github.com/Skyrxin/sast-mcp-serverOr 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 |
| string | required | Path to scan |
| string |
| Scanner: |
| string |
| Minimum severity: |
| string |
| Minimum confidence: |
| bool |
| Only scan git-modified files |
| int |
| Max findings to return |
| int |
| Pagination offset |
scan_all
Run ALL installed scanners in parallel with automatic deduplication. Recommended for comprehensive security scanning.
Parameter | Type | Default | Description |
| string | required | Path to scan |
| string |
| Minimum severity (higher default to reduce noise) |
| string |
| Minimum confidence |
| bool |
| Only scan git-modified files |
| int |
| Max findings to return |
| int |
| Pagination offset |
scan_git_history
Scan the entire .git history for leaked secrets and credentials using Gitleaks.
Parameter | Type | Default | Description |
| string |
| Path to the repository root (must contain |
| string |
| 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 |
| string | required | Directory containing the docker-compose file |
| string | required | Name of the docker-compose file (e.g. |
| string | required | URL of the running app once it's up (e.g. |
export_sarif
Export scan results in SARIF 2.1.0 format for CI/CD integration.
Parameter | Type | Default | Description |
| string | required | Path to scan |
| string |
| Scanner to use |
| string |
| Minimum severity |
| string |
| Minimum confidence |
| 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 |
| string | required | Path to scan |
| string |
| Name for this baseline (e.g. |
| string |
| Scanner to use |
| string |
| Minimum severity to include |
| string |
| Minimum confidence to include |
compare_baseline
Compare a fresh scan against a saved baseline to highlight new and fixed findings.
Parameter | Type | Default | Description |
| string | required | Path to scan |
| string |
| Baseline tag to compare against |
| string |
| Scanner to use |
| string |
| Minimum severity to include |
| string |
| 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 |
| string | required | Path to a SARIF file from |
| int | required | Target DefectDojo engagement ID |
| bool |
| Mark imported findings active |
| bool |
| 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 |
| string | required | Path to a SARIF file from |
| string | required | Repository in |
| string | required | Full commit SHA the results apply to |
| string | required | Fully qualified ref, e.g. |
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 |
| string | required | Scanned project root (with |
| string | required | Hash of the finding to fix (from scan output) |
| int |
| 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 |
| string | required | Directory the patch paths are relative to |
| string | required | The unified diff text to apply |
| bool |
| Validate without modifying files |
evaluate_policy
Run all scanners and return an explicit PASS/FAIL verdict for CI gating.
Parameter | Type | Default | Description |
| string | required | Path to scan |
| int |
| Max allowed CRITICAL (−1 = unlimited) |
| int |
| Max allowed HIGH (−1 = unlimited) |
| int |
| Max allowed MEDIUM (−1 = unlimited) |
| bool |
| Fail if findings are new vs. a |
| string |
| Baseline tag used when |
| string |
|
|
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 |
| string | required | Path to scan |
| string |
| File to write (empty = return inline) |
| string |
| Minimum severity to include |
| bool |
| Only dependency (SCA) findings; |
| string |
|
|
generate_report
Run all scanners and render an executive security report.
Parameter | Type | Default | Description |
| string | required | Path to scan |
| string |
| File to write (empty = return inline HTML; required for PDF) |
| string |
| Minimum severity to include |
| string |
|
|
compliance_report
Map findings to a compliance framework and report the posture.
Parameter | Type | Default | Description |
| string | required | Path to scan |
| string |
|
|
| string |
| Optional file to write the markdown report |
| string |
| Minimum severity to include |
scan_image
Scan a container image reference for vulnerabilities and secrets (Trivy or Grype).
Parameter | Type | Default | Description |
| string | required | Image reference, e.g. |
| string |
|
|
| string |
| Minimum severity to report |
| string |
|
|
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 |
| string | required | Project root (with a |
| string | required | Hash of the finding to fix |
| string | required | Unified diff to apply |
| string |
| Re-scan scanner (default: the finding's scanner) |
| bool |
| 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 |
| string | required | Project root the results belong to |
| string | required | Path to a SARIF 2.1.0 file |
| string |
| Source scanner name to record |
| bool |
| 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 |
| string | required | Project root (with a |
| string | required | Hash of the finding to triage |
| string |
|
|
| 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 |
| string | required |
|
| string | required |
|
| int | required | PR number / MR IID |
| 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 |
| string | required | Jira project key (e.g. |
| string | required | Issue title |
| string | required | Issue description |
| string |
| Jira issue type |
Tip:
scan_vulnerabilities,scan_all, andscan_git_historyacceptoutput_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). SetSAST_MCP_JWT_SECRETand 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.sarifCompatible 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.0Note: The old
ssetransport is deprecated. Please migrate tostreamable-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 assessmentfix_vulnerability: Focused remediation advisorpr_security_check: Scan only git diffs and enforce a severity gatecompliance_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 dashboardsast://config: Server configuration and statussast://scanners: Available scanners and languagessast://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 dashboardgenerate_fix_prompt: Build an LLM-ready prompt for a specific findingapply_patch: Apply the resulting unified diff viagit 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 upPrefer to build locally?
docker build -t sast-mcp-server . # minimal
docker build -f Dockerfile.full -t sast-mcp-server:full . # fullCodeQL and OWASP ZAP are not bundled in the image — CodeQL ships a multi-GB bundle (mount at runtime) and ZAP's
run_active_scanorchestrates 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-reportartifact. A snapshot lives inexamples/self-scan/.Load-tested HTTP transport.
scripts/loadtest.pyruns in CI against the Streamable HTTP server: a local run sustains ~210 req/s at p95 ≈ 290 ms with zero failures across/health,/ready,/metricsunder 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 50Configuration
Environment Variables
Variable | Default | Description |
|
| Scan timeout in seconds |
|
| Log level: |
|
| Cache time-to-live in seconds (non-tagged scans) |
|
| Max non-tagged cached scans to retain (0 = unlimited) |
|
| Retry attempts for integration HTTP calls |
|
| Per-request timeout (s) for integration HTTP calls |
|
| Max subprocess scanners running at once (0 = unlimited) |
|
| Per-client request budget for HTTP transports (0 = disabled) |
| (none) | JSON map of per-scanner timeout overrides, e.g. |
| (none) | API key for remote (HTTP) authentication |
| (none) | HMAC-SHA256 secret for JWT bearer auth (scopes enforced per tool) |
| (none) | Base URL of a DefectDojo instance (for |
| (none) | DefectDojo API v2 token |
| (none) | Token with |
| (none) | GitLab token with |
|
| GitLab base URL (self-managed override) |
| (none) | Slack incoming webhook (for |
| (none) | Microsoft Teams incoming webhook (for |
| (none) | Jira Cloud credentials (for |
Operational endpoints (HTTP transports)
When running with --transport streamable-http, the server exposes:
Endpoint | Purpose |
| Liveness probe — |
| Readiness probe — lists installed scanners ( |
| 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_serverProject 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 issuesLicense
Available Tools
27 toolsapply_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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | Directory the patch paths are relative to. | |
| patch | Yes | The unified diff text to apply. | |
| check_only | No | If True, validate without modifying any files. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| provider | Yes | 'github' or 'gitlab'. | |
| repo | Yes | For GitHub, 'owner/name'. For GitLab, the numeric project ID or URL-encoded 'group/project' path. | |
| pr_number | Yes | PR number (GitHub) or merge request IID (GitLab). | |
| body | Yes | Markdown comment body (e.g. a scan summary or gate result). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to the directory to scan. | |
| tag | No | The baseline tag to compare against. Defaults to 'latest'. | latest |
| scanner_name | No | Scanner to use. Defaults to 'bearer'. | bearer |
| min_severity | No | Minimum severity (LOW, MEDIUM, HIGH, CRITICAL). | LOW |
| min_confidence | No | Minimum confidence (LOW, MEDIUM, HIGH). | LOW |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to scan. | |
| framework | No | 'owasp' (default), 'sans', 'pci', or 'cis'. | owasp |
| output_path | No | Optional path to write the markdown report. | |
| min_severity | No | Minimum severity to include. | LOW |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project_key | Yes | The Jira project key (e.g. 'SEC'). | |
| summary | Yes | Issue title. | |
| description | Yes | Issue description (plain text). | |
| issue_type | No | Jira issue type name (default 'Bug'). | Bug |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to the directory to scan. | |
| max_critical | No | Max allowed CRITICAL findings (default 0). -1 = unlimited. | |
| max_high | No | Max allowed HIGH findings. -1 = unlimited (default). | |
| max_medium | No | Max allowed MEDIUM findings. -1 = unlimited (default). | |
| fail_on_new | No | If true, fail when findings are new vs. the baseline. | |
| baseline_tag | No | Baseline tag to diff against when ``fail_on_new`` is set. | latest |
| min_severity | No | Minimum severity to include in the scan. | LOW |
| min_confidence | No | Minimum confidence to include in the scan. | LOW |
| output_format | No | 'markdown' (default) or 'json' (machine-readable verdict). | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to the directory or file to scan. | |
| scanner_name | No | The scanner to use ('bandit', 'njsscan', 'bearer', 'semgrep', 'trivy', 'codeql', 'checkov'). Defaults to 'bearer'. | bearer |
| min_severity | No | Minimum severity to report (LOW, MEDIUM, HIGH, CRITICAL). | LOW |
| min_confidence | No | Minimum confidence to report (LOW, MEDIUM, HIGH). | LOW |
| output_path | No | Optional path to write the SARIF file. If empty, returns the SARIF JSON as a string. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to scan. | |
| output_path | No | File path to write the SBOM (empty = return inline). | |
| min_severity | No | Minimum severity to include. | LOW |
| sca_only | No | Include only dependency (SCA) findings (default). Set False to include every finding as a vulnerability entry. | |
| format | No | 'cyclonedx' (default) or 'spdx'. | cyclonedx |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | Root of the scanned project (must have a `.sast-mcp-cache`). | |
| finding_hash | Yes | Hash of the finding to remediate (shown in scan output). | |
| context_window | No | Source lines to include before/after the finding. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to scan. | |
| output_path | No | File path to write the report (empty = return inline HTML; required for PDF since it is binary). | |
| min_severity | No | Minimum severity to include. | LOW |
| format | No | 'html' (default) or 'pdf'. PDF requires the optional [pdf] extra (`pip install "sast-mcp-server[pdf]"`). | html |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The root directory of the project (where .sast-mcp-ignore.json lives). | |
| finding_hash | Yes | The unique hash of the finding to ignore (shown in scan results). | |
| reason | No | Optional justification for ignoring the vulnerability. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | Project root the SARIF results belong to (for caching). | |
| sarif_path | Yes | Path to a SARIF 2.1.0 JSON file. | |
| scanner_name | No | Name to record as the source scanner (default 'external'). | external |
| save | No | Cache the imported findings so compare_baseline / dashboards see them (default True). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The root directory of the project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The message text (Slack mrkdwn supported). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | The message body (Markdown supported). | |
| title | No | Card title. | SAST Security Notification |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | Root of the scanned project (with a `.sast-mcp-cache`). | |
| finding_hash | Yes | Hash of the finding to fix (from earlier scan output). | |
| patch | Yes | The unified diff to apply (e.g. produced via generate_fix_prompt). | |
| scanner_name | No | Scanner to re-scan with. Defaults to the finding's originating scanner, falling back to all scanners. | |
| auto_rollback | No | Revert the patch if verification fails (default True). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | Path to the directory containing the docker-compose file. | |
| docker_compose_file | Yes | The name of the docker-compose file (e.g. docker-compose.yml). | |
| target_url | Yes | The URL of the target application once it's up (e.g. http://localhost:8080). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to the directory to scan. | |
| tag | No | A name for this baseline (e.g., 'main', 'pre-release'). Defaults to 'latest'. | latest |
| scanner_name | No | Scanner 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_severity | No | Minimum severity to include (LOW, MEDIUM, HIGH, CRITICAL). | LOW |
| min_confidence | No | Minimum confidence to include (LOW, MEDIUM, HIGH). | LOW |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to the directory or file to scan. | |
| min_severity | No | Minimum severity to report (LOW, MEDIUM, HIGH, CRITICAL). Defaults to MEDIUM to reduce noise from multiple scanners. | MEDIUM |
| min_confidence | No | Minimum confidence to report (LOW, MEDIUM, HIGH). | LOW |
| git_diff_only | No | If true, only reports findings in files modified in git diff. | |
| limit | No | Maximum number of findings to return (for pagination). | |
| offset | No | Pagination offset. | |
| output_format | No | 'markdown' (human-readable, default) or 'json' (machine-readable list of findings for agents / CI). | markdown |
| use_cache | No | If true, reuse the last cached scan_all when the target's files are unchanged (incremental scan). Ignored with git_diff_only. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | No | Path to the repository root (must contain a .git directory). | . |
| min_severity | No | Minimum severity threshold (defaults to LOW). | LOW |
| output_format | No | 'markdown' (human-readable, default) or 'json' (machine-readable list of findings for agents / CI). | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| image_ref | Yes | The image reference to scan. | |
| scanner_name | No | 'trivy' (default) or 'grype'. | trivy |
| min_severity | No | Minimum severity to report (LOW, MEDIUM, HIGH, CRITICAL). | MEDIUM |
| output_format | No | 'markdown' (default) or 'json'. | markdown |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The absolute path to the directory or file to scan. | |
| scanner_name | No | The scanner to use ('bandit', 'njsscan', 'bearer', 'semgrep'). Defaults to 'bearer'. | bearer |
| min_severity | No | Minimum severity to report (LOW, MEDIUM, HIGH, CRITICAL). | LOW |
| min_confidence | No | Minimum confidence to report (LOW, MEDIUM, HIGH). | LOW |
| git_diff_only | No | If true, only reports findings in files modified in git diff. | |
| limit | No | Maximum number of findings to return (for pagination). | |
| offset | No | Pagination offset. | |
| output_format | No | 'markdown' (human-readable, default) or 'json' (machine-readable list of findings for agents / CI). | markdown |
| use_cache | No | If true, reuse the last cached scan when the target's files are unchanged (incremental scan). Ignored when git_diff_only is set. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | Root of the scanned project (with a `.sast-mcp-cache`). | |
| finding_hash | Yes | Hash of the finding to triage. | |
| disposition | No | VEX state keyword (empty = return a triage prompt instead). | |
| justification | No | Rationale (CycloneDX justification keyword for not_affected, otherwise free text). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| target_path | Yes | The root directory of the project. | |
| finding_hash | Yes | The unique hash of the finding to unignore. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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=...).
| Name | Required | Description | Default |
|---|---|---|---|
| sarif_path | Yes | Path to a SARIF file produced by `export_sarif`. | |
| engagement_id | Yes | Numeric ID of the target DefectDojo engagement. | |
| active | No | Mark imported findings as active. | |
| verified | No | Mark imported findings as verified. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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=...).
| Name | Required | Description | Default |
|---|---|---|---|
| sarif_path | Yes | Path to a SARIF file produced by `export_sarif`. | |
| repo | Yes | Repository in `owner/name` form. | |
| commit_sha | Yes | Full SHA of the commit the results apply to. | |
| ref | Yes | Fully qualified ref, e.g. `refs/heads/main`. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
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
Zero-config MCP security scanner for AI-generated apps. 25K+ vulnerability patterns.
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Pay-per-call cybersecurity for AI agents: vuln scans, threat intel, compliance, code security.
Deep security scans of repos you own from your editor: dependency CVEs, SAST, git-history secrets.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceIntegrates 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.6MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to scan project dependencies and Infrastructure as Code files for security vulnerabilities and misconfigurations. It also provides automated fixing capabilities to remediate identified security issues.183MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with 25 security analysis tools including vulnerability scanning, package hallucination detection, prompt injection firewall, and CI/CD integration.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to scan code for security and quality issues and receive machine-readable reports with suggested fixes and verification criteria.722MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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