pci-dss-mcp
pci-dss-mcp is a static analysis MCP server that scans Go payment service codebases for PCI DSS v4.0.1 violations, mapping every finding to a specific requirement number.
Orchestration & Reporting
triage_findings— Run all scanners simultaneously with AI-assisted prioritization, file:line enrichment, triage hints, and middleware/import contextgenerate_compliance_report— Produce a full PCI DSS v4.0.1 report with requirement-level pass/fail status and severity counts (suitable for CI gates and audits)
Specialized Scanners
scan_pan_data— Detect PAN/SAD/CVV storage and logging violations (3.3.1, 3.4.1, 3.5.1); optional taint-flow analysis to reduce false positivescheck_encryption— Find weak hash algorithms (MD5/SHA1), hardcoded keys/IVs, and plain HTTP URLs (4.2.1, 6.2.4)check_tls_config— IdentifyInsecureSkipVerify, weakMinVersion, and prohibited cipher suites like RC4/3DES/NULL (4.2.1)check_secrets_in_configs— Scan.env,.yaml,.json,.tomlfiles for hardcoded API keys, passwords, and tokens (8.6.2)check_error_handling— Detect sensitive error disclosure in payment handlers (6.2.4)check_auth_strength— Find hardcoded passwords, weak password policies (min length < 12), missing MFA on payment routes, and weak webhook signatures (8.3.1, 8.3.6, 8.4.2, 8.6.2)audit_log_coverage— Detect payment handlers missing structured audit logging; framework-aware for net/http, gin, and echo (10.2.1)check_data_retention— Find Redis/DB storage of CVV/PAN without TTL, config files missing TTL on sensitive keys, and incorrect memory zeroing timing (3.2.1, 3.3.1)check_payment_page_scripts— Detect missing CSP headers,unsafe-inline/unsafe-evalin CSP, external scripts without SRI, and inline scripts without nonce (6.4.3, 11.6.1)check_dependencies— Scango.modagainst the OSV.dev vulnerability database in auto/online/offline modes (6.3.3)
Supporting Tools
generate_sbom— Generate a CycloneDX v1.6 SBOM fromgo.mod/go.sumin JSON or XML (6.3.2)explain_requirement— Look up any PCI DSS v4.0.1 requirement by ID to get its title, description, and testing procedureupdate_vulnerability_db— Download a fresh OSV Go vulnerability snapshot (~7.5 MB) for offline scanning
Cross-Cutting Features
Summary and flat response shapes with cursor-based pagination (10-minute TTL)
Filter by
min_severity(CRITICAL/HIGH/MEDIUM/LOW/INFO) andrule_filter(comma list or regex)Configurable file exclusion via glob patterns (vendor, generated files, mocks, etc.)
Optional inclusion of test files and git-untracked files
Operates via stdio MCP protocol, compatible with Claude Desktop, Cursor, and other MCP clients
pci-dss-mcp
Static analysis MCP server for Go payment service codebases. Every detected PCI DSS v4.0.1 violation in a Go payment service codebase is mapped to the specific requirement number before the code ships.
What it does
pci-dss-mcp is a stdio MCP server that runs 12 scanners, an orchestrator, and an AI triage engine over a Go payment service codebase. Each finding carries a requirement_id mapped to a specific PCI DSS v4.0.1 line item; see docs/requirement-mapping.md for the canonical rule-to-requirement table and testdata/vulnerable-payment-service/EXPECTED-FINDINGS.md for live golden output.
What pci-dss-mcp catches today
HTTP framework input flow into log / error / panic sinks. Tier 1 frameworks (gin, chi, gorilla/mux, net/http (Go 1.22+), echo v4, fiber v2) and Tier 1 loggers (log/slog, logrus, zap, zerolog, logr, klog, hclog) ship in v0.7. Tier 2 (kratos, apex/log, charmbracelet/log) lands in v0.8. Tier 3 (fasthttp, beego, iris, httprouter, project-internal) is user-configurable via Phase 25 YAML once shipped. See docs/http_input_taint.md.
What pci-dss-mcp is NOT
Not a replacement for broad SAST. Use Semgrep, CodeQL, or gosec for OWASP Top-10 and language-agnostic vulnerabilities.
Not a replacement for LLM-based code review. pci-dss-mcp maps payment-specific issues to PCI DSS requirement IDs; LLM agents catch broad bugs via reasoning. The two layers compose.
Not Go-agnostic. Go-specific AST patterns and taint flow tracing are what make the precision possible.
Not a QSA replacement. Static analysis covers ~6% of PCI DSS v4.0.1 requirements. A Qualified Security Assessor must sign off on the rest.
Related MCP server: secureaudit-mcp
Install
Go install (primary)
Requires Go 1.25+:
go install github.com/shyshlakov/pci-dss-mcp@latestThe binary lands at $(go env GOPATH)/bin/pci-dss-mcp. See docs/install-from-source.md for PATH resolution, the macOS codesign provenance fix, cosign verification, and the MCP client JSON config.
Docker (alternative)
docker pull ghcr.io/shyshlakov/pci-dss-mcp:v0.6.2Useful for CI pipelines, QSA auditors who do not develop Go locally, or any environment without a host Go toolchain.
MCP Registry
Listed as io.github.shyshlakov/pci-dss-mcp at registry.modelcontextprotocol.io. Auto-published on every tag.
Usage
Add to your MCP client config (Claude Desktop claude_desktop_config.json, Cursor .cursor/mcp.json, or claude mcp add for Claude Code):
{
"mcpServers": {
"pci-dss-mcp": {
"command": "docker",
"args": ["run", "-i", "--rm",
"--mount", "type=bind,src=/Users/you/go/src,dst=/Users/you/go/src,readonly",
"ghcr.io/shyshlakov/pci-dss-mcp:v0.6.2"]
}
}
}src= and dst= mirror the same absolute path so the container sees your code at the same path your host uses; prompts pass the normal host path with no translation. For the go install variant and per-client examples, see docs/usage.md.
Two prompts to paste into your MCP client:
Run pci-dss-mcp triage on /Users/you/payments-service. Use min_severity=MEDIUM and group findings by PCI DSS requirement.Generate a PCI DSS compliance report for /Users/you/payments-service in JSON format. Show requirement-level pass/fail status and severity counts.
Tools
Tool | Purpose | Docs |
| All scanners + AI classification + file:line context in one call | |
| Raw requirement pass/fail report (orchestrator over all scanners) | |
| PAN/SAD storage and logging (3.3.1, 3.4.1, 3.5.1) | |
| Weak hashing, hardcoded keys, plain HTTP (4.2.1, 6.2.4) | |
| Insecure TLS configs (4.2.1) | |
| Credentials in config files (8.6.2) | |
| Error responses leaking sensitive context (6.2.4) | |
| Hardcoded passwords, weak policy, missing MFA, webhook signatures (8.3.1, 8.3.6, 8.4.2, 8.6.2) | |
| Missing audit logs on payment flows (10.2.1) | |
| Missing TTL, sensitive storage, missing zeroing (3.2.1, 3.3.1) | |
| Missing CSP/SRI/nonce on payment pages (6.4.3, 11.6.1) | |
| Vulnerable Go dependencies via OSV (6.3.3); govulncheck-style privacy: no module names sent to OSV.dev. See docs/check_dependencies.md. Also covers | |
| CycloneDX 1.6 SBOM from go.mod/go.sum (6.3.2) | |
| Look up a PCI DSS v4.0.1 requirement by ID |
All tools declare typed OutputSchema. See docs/tools.md for the catalog index and migration history.
Documentation
docs/usage.md, client setup, prompt templates, suppressing findings
docs/severity.md, severity model and rule-to-severity mapping
docs/taint.md, taint analysis defaults and toggles
docs/scoping.md, package exclusion and CDE scope
docs/comparison.md, pci-dss-mcp vs Semgrep / CodeQL / gosec / Snyk Code
docs/ci-cd.md, GitHub Actions and GitLab CI integration
docs/pci-coverage.md, PCI DSS v4.0.1 requirement coverage matrix
docs/install-from-source.md, source build, cosign verification, reload
docs/requirement-mapping.md, canonical rule_id to requirement_id table
CONTRIBUTING.md, development setup, fuzz targets
ROADMAP.md, planned features
CHANGELOG.md, version history
Status
Active development, pre v1.0. See ROADMAP.md and CHANGELOG.md.
License
MIT, see LICENSE.
pci-dss-mcp is a static analysis tool. It cannot replace a Qualified Security Assessor. Use its output as input to your compliance process, not as the compliance itself.
Available Tools
15 toolsaudit_log_coverageA
Scan Go source files for payment handlers missing structured audit logging (PCI DSS 10.2.1). Detects: missing logging, unstructured-only logging (fmt/log), and reports handlers with structured logging. Framework-aware: supports net/http, gin, echo handler signatures. Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the Go project directory to scan for missing audit logging in payment handlers | |
| exclude_patterns | No | Optional glob patterns to exclude. Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior audit_log_coverage response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description compensates fully by detailing the response structure (summary, histogram, top findings), pagination with 10-minute TTL, server caps on limit, and framework awareness. This exceeds expectations for behavioral disclosure.
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 comprehensive but slightly verbose; however, every sentence serves a purpose. It is well-organized and front-loaded with the core purpose.
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 complexity (8 parameters, output schema exists), the description covers all necessary context: scanning scope, framework support, response shapes, pagination, and filtering. No gaps remain.
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?
With 100% schema coverage, the description adds substantial context: cursor 10-minute TTL, limit server caps, include_tests industry consensus, and shape changes triggered by min_severity/rule_filter. These details enrich the schema descriptions significantly.
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 explicitly states 'Scan Go source files for payment handlers missing structured audit logging (PCI DSS 10.2.1)', providing a specific verb and resource. It clearly differentiates from sibling tools by focusing on audit logging compliance.
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 advises 'Prefer this for mixed queries' and explains pagination via cursor, as well as response shape changes with filters. However, it does not explicitly mention when to use alternative tools from the sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_auth_strengthA
Scan Go source files for weak authentication: hardcoded passwords (PCI DSS 8.3.1), password policy with minimum length below 12 (PCI DSS 8.3.6), and payment routes missing MFA middleware (PCI DSS 8.4.2). Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response. Maps findings to PCI DSS 8.3.1, 8.3.6, 8.4.2.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the Go project directory to scan for authentication strength violations | |
| exclude_patterns | No | Optional glob patterns to exclude. Supports directory patterns (vendor/) and file globs (*.pb.go). Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior check_auth_strength response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 default response shape (summary with counts, histogram, top findings), pagination behavior, and how filters affect output. It does not mention authentication requirements, rate limits, or session cache TTL beyond 10 minutes, but covers the key behavioral aspects.
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 dense but well-structured, front-loading the purpose and then detailing response shapes and filtering. Some redundancy (e.g., repeated mention of PCI DSS mappings) could be trimmed, but overall it is informative without being overly verbose.
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 complexity (8 parameters, required output schema), the description adequately explains default behavior, pagination, and filter effects. It references PCI DSS mappings but does not detail the output schema structure (since it exists separately). It is complete enough for reliable 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 description coverage is 100%, so baseline is 3. The description adds context about combined effects (e.g., filters force flat response) and default values, but each parameter's individual purpose is already well-documented in the schema. Minor added value.
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 explicitly states it scans Go source files for weak authentication, listing specific PCI DSS checks (8.3.1, 8.3.6, 8.4.2). This clearly distinguishes it from sibling tools like audit_log_coverage or check_dependencies, which target different compliance areas.
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 clear guidance on when to use this tool ('Prefer this for mixed queries') and how filters (min_severity, rule_filter) change the response shape. It explains pagination with cursor and limits but does not explicitly state when not to use it or list alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_data_retentionA
Scan Go source and config files for unsafe data retention: Redis/DB storage of CVV/PAN without TTL (PCI DSS 3.2.1), config files missing TTL on sensitive keys (PCI DSS 3.3.1), and incorrect memory zeroing timing after authorization. Scans .go, .yaml, .json, .toml files. Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response. Maps findings to PCI DSS 3.2.1, 3.3.1.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to scan for unsafe data retention patterns (Redis/DB without TTL, config missing TTL, memory zeroing timing) | |
| exclude_patterns | No | Optional glob patterns to exclude. Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior check_data_retention response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries transparency. It discloses file types scanned (.go, .yaml, .json, .toml), default response shape, pagination via cursor, and effects of filter parameters. It implies read-only scanning. There is no contradiction, and the behavior is well-explained.
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 detailed but not excessively verbose given the tool's complexity. It front-loads the purpose and then explains response shapes and pagination. Each sentence adds value, though some redundancy exists (e.g., mentioning response shapes multiple times). Overall 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?
The description covers all essential aspects: scanning scope, file types, response shapes, pagination, filtering, and PCI DSS mapping. Since an output schema exists, the description doesn't need to detail return fields. It provides sufficient context for an AI agent to correctly invoke the 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?
All 8 parameters have detailed schema descriptions (100% coverage), so baseline is 3. The description adds value by explaining how parameters like min_severity and rule_filter change the response shape from summary to flat, and clarifies pagination behavior with cursor and limit. This context goes beyond 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 scans for unsafe data retention patterns (CVV/PAN without TTL, missing TTL in configs, memory zeroing timing) in Go source and config files. It specifically names PCI DSS requirements, distinguishing it from sibling tools like check_secrets_in_configs or check_encryption.
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 guidance on when to use this tool (prefer for mixed queries) and how to use it (pagination, filtering, response shapes). It explains the default summary response and how parameters like min_severity affect the shape. However, it does not explicitly state when not to use it or compare to specific siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_dependenciesA
Scan go.mod dependencies for known vulnerabilities (PCI DSS 6.3.3). Bulk-downloads the public OSV Go vulnerability snapshot and intersects locally against go.mod, matching the govulncheck privacy model. No module names are sent to OSV.dev. Cache TTL: 24h fresh, 24h-7d revalidate via ETag, >7d force-refresh. Run update_vulnerability_db first to bootstrap the cache for air-gapped environments. Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 1 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use min_severity / rule_filter / positive limit for a filtered flat response. Maps findings to PCI DSS 6.3.3.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the project directory containing go.mod to scan for vulnerable dependencies | |
| mode | No | Scan mode: only 'auto' (default) is supported after v0.6.3. Empty value is treated as 'auto'. | |
| cursor | No | Opaque cursor token from a prior check_dependencies response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given no annotations, the description covers key behaviors: bulk-downloads OSV snapshot, no module names sent (privacy), Cache TTL details, response shape defaults, and pagination. It lacks mention of auth requirements or rate limits but is otherwise 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 dense and front-loaded with the purpose. It covers caching, privacy, shapes, and parameters efficiently, though some sentences could be tightened. It earns its place 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?
With an output schema present, the description focuses on behavioral and usage context. It explains prerequisite, caching policy, response shape variants, pagination, and filtering. All aspects of a complex tool are addressed, making it self-sufficient for agent 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?
The input schema already has 100% parameter descriptions, but the description adds critical meaning: default mode, cursor usage for pagination, limit capping, and how min_severity/rule_filter change the response shape. This goes beyond schema documentation.
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 go.mod for vulnerabilities (PCI DSS 6.3.3). It specifies the resource ('go.mod dependencies') and action ('scan for vulnerabilities'), distinguishing it from sibling tools like update_vulnerability_db or check_tls_config.
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 clear usage steps: run update_vulnerability_db first for air-gapped environments, use cursor for pagination, and apply min_severity/rule_filter for filtered responses. However, it does not explicitly contrast with other sibling tools beyond the prerequisite note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_encryptionA
Scan Go source files for encryption violations: weak hash algorithms (md5/sha1) with context scoring, hardcoded encryption keys/IVs, and plain HTTP URLs. Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response. Maps findings to PCI DSS 6.2.4, 4.2.1.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the Go project directory to scan for encryption violations | |
| exclude_patterns | No | Optional glob patterns to exclude. Supports directory patterns (vendor/) and file globs (*.pb.go). Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior check_encryption response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It transparently explains response shapes (summary vs flat), pagination with cursor and TTL, limit cap behavior, and filtering effects. Also mentions mapping to PCI DSS standards.
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?
Description is detailed and informative but on the longer side. It front-loads the main purpose and then structures details about response shapes and parameters. Could be slightly more concise but remains 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?
With full schema coverage and output schema present, the description thoroughly explains response shapes, pagination, and behavior under various parameter combinations. It is sufficiently complete for an AI agent to invoke correctly.
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?
Adds significant meaning beyond schema: cursor has 10-min TTL, limit default yields summary and warns against raising it, exclude_patterns defaults, and min_severity/rule_filter force flat response. Schema coverage is 100% but description enriches understanding.
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 Go source files for encryption violations (weak hashes, hardcoded keys, plain HTTP URLs). It distinguishes from siblings like check_auth_strength and check_secrets_in_configs by focusing on encryption-specific issues in Go code, with unique response shape behavior.
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 guidance on preferring this for mixed queries, describes when to use min_severity and rule_filter for flat responses, and explains pagination with cursor. However, it does not explicitly state when not to use this tool or mention alternatives among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_error_handlingA
Scan Go source files for payment handler error disclosure: detects err.Error() in http.Error, fmt.Fprintf with error variables, w.Write with error bytes, and json.Encode of errors. Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response. Maps findings to PCI DSS 6.2.4.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the Go project directory to scan for error handling violations in payment handlers | |
| exclude_patterns | No | Optional glob patterns to exclude. Supports directory patterns (vendor/) and file globs (*.pb.go). Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior check_error_handling response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Explains default response shape, effect of min_severity/rule_filter on response shape, pagination cursor TTL and usage, and server limit cap. No annotations provided, so description fully carries behavioral info.
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?
Information-dense yet well-structured: purpose first, then behavior, then parameter-specific guidance. Could be slightly more concise but 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?
Comprehensively covers purpose, behavior, all parameters, response shapes, pagination, and filtering. Output schema exists, so return values are covered. No gaps for a scanning tool of this complexity.
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 already covers all 8 parameters. Description adds extra context for limit, cursor, min_severity, rule_filter, and response shape changes, exceeding 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?
Clearly states verb 'Scan...detects' and resource 'Go source files for payment handler error disclosure'. Distinguishes from sibling tools which cover other security checks.
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 guidance on when to use defaults vs filtered responses, and pagination. However, does not explicitly mention alternative tools or when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_payment_page_scriptsA
Scan Go source files and HTML templates for payment page script security violations (PCI DSS 6.4.3, 11.6.1). Detects: missing Content-Security-Policy headers in Go payment handlers, unsafe-inline/unsafe-eval in CSP, external scripts without SRI (integrity attribute) in HTML templates, inline scripts without nonce attribute. Framework-aware: supports net/http, gin, echo handler signatures. Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response. Maps findings to PCI DSS 6.4.3, 11.6.1.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the project directory to scan for payment page script security violations (CSP headers in Go handlers and SRI/nonce in HTML templates) | |
| exclude_patterns | No | Optional glob patterns to exclude. Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior check_payment_page_scripts response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description thoroughly discloses behavioral traits beyond annotations (none provided): it describes the default summary response shape with by_severity counts, by_rule histogram, top findings, and a pagination cursor. It mentions caching with a 10-minute TTL and server caps on limit (LIMIT_EXCEEDS_PAGE_SIZE). It also notes framework awareness (net/http, gin, echo), which is critical for accurate scanning.
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 dense but efficient, front-loading the core action and violations. It is a single paragraph that could be broken into sections, but it is not excessively long (about 150 words). Every sentence provides valuable information, with minimal 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 tool's complexity (8 parameters, output schema present, diverse detection rules), the description is complete. It covers detection rules, PCI DSS mapping, framework support, response shapes, pagination, caching, server caps, and filter behavior. No gaps are evident.
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% parameter description coverage, so the description only adds marginal value, such as clarifying default exclude patterns and the effect of min_severity/rule_filter on response shape. Since the schema already documents each parameter adequately, a 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 it scans Go source files and HTML templates for payment page script security violations (PCI DSS 6.4.3, 11.6.1). It lists specific detection types (missing CSP headers, unsafe-inline/unsafe-eval, external scripts without SRI, inline scripts without nonce), making the tool's purpose highly specific and distinct from sibling tools like check_auth_strength or check_encryption.
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 advises preferring this tool for mixed queries and explains how response shape changes with filters (min_severity / rule_filter forces flat response). It provides guidance on pagination (follow cursor) and filter usage. However, it does not explicitly state when not to use this tool or name alternatives, though the sibling list implies other tools for different checks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_secrets_in_configsA
Scan configuration files (.env, .yaml, .json, .toml) for hardcoded secrets: API keys, passwords, tokens, and connection strings with embedded credentials. Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response. Maps findings to PCI DSS 8.6.2.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the project directory to scan for hardcoded secrets in config files (.env .yaml .json .toml) | |
| exclude_patterns | No | Optional glob patterns to exclude. Supports directory patterns (vendor/) and file globs (*.env). Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior check_secrets_in_configs response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It thoroughly details response shapes (summary vs flat), pagination via cursor with TTL, page size caps, and the effects of filters. All important behaviors are disclosed.
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 well-organized and front-loaded with purpose. It is fairly long but each sentence adds necessary context. Minor redundancy could be trimmed, but overall it's 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 tool's complexity with multiple response shapes, pagination, and filters, the description covers all aspects including when to use default vs flat, how to paginate, and the effect of each parameter on the output. No gaps.
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%, but the description adds significant value beyond the schema by explaining the overall workflow, response shapes, and how parameters interact (e.g., min_severity forces flat response). It does not merely repeat 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 scans configuration files for hardcoded secrets like API keys, passwords, etc. It uses a specific verb and resource, and the purpose is distinct from sibling tools which focus on other audit areas.
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 the default response shape, how filtering changes it, and pagination behavior. It suggests using the default for mixed queries and provides guidance on filters. However, it doesn't explicitly mention when to avoid this tool in favor of siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_tls_configA
Scan Go source files for TLS configuration violations: InsecureSkipVerify, weak MinVersion (below TLS 1.2), missing MinVersion, and prohibited cipher suites (RC4, 3DES, NULL). Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns / min_severity / rule_filter for a filtered flat response. Maps findings to PCI DSS 4.2.1.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the Go project directory to scan for TLS configuration violations | |
| exclude_patterns | No | Optional glob patterns to exclude. Supports directory patterns (vendor/) and file globs (*.pb.go). Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| cursor | No | Opaque cursor token from a prior check_tls_config response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description covers all behaviors: default response shape, pagination via cursor (10-minute TTL), server caps on limit, and response shape forced by filters. This is thorough for a security scanning tool.
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 long but well-structured: starts with purpose, then details defaults and behaviors, then usage guidance. Every sentence provides necessary information, though it could be slightly more concise.
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 8 parameters, no annotations, and an output schema, the description fully covers all aspects: scanning behavior, filtering, pagination, response shapes, and PCI DSS mapping. It leaves no significant gaps.
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%, but description adds substantial value: explains default exclusion patterns, cursor behavior, limit cap, and how min_severity/rule_filter change the response shape. This goes well beyond the schema's basic 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 scans Go source files for TLS configuration violations, listing specific issues. It is distinct from sibling tools like check_auth_strength or check_data_retention, which target different compliance areas.
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?
Gives clear guidance on when to use the default summary mode vs flat response with filters, and explains that limit should not be raised arbitrarily. However, it does not explicitly contrast with sibling tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_requirementA
Look up a PCI DSS v4.0.1 requirement by ID. Returns title, description, and testing procedure.
| Name | Required | Description | Default |
|---|---|---|---|
| requirement_id | Yes | PCI DSS v4.0.1 requirement ID (e.g. 3.3.1 or 8.3.6) |
Output Schema
| Name | Required | Description |
|---|---|---|
| requirement | Yes | PCI DSS v4.0.1 requirement record (title, description, testing procedure, detectability, accuracy metadata) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral transparency burden. It explicitly states that it returns title, description, and testing procedure for a given requirement ID, implying no 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 two sentences, front-loaded with the action, and every word is necessary. No 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 lookup tool with full schema coverage and an output schema, the description covers purpose, input, and output completely. No gaps.
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 description adds 'by ID' which is redundant with the parameter name and schema description. No additional meaning is added.
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 'look up' and the resource 'PCI DSS v4.0.1 requirement', and specifies the output fields (title, description, testing procedure). This distinguishes it from sibling tools which are about auditing or checking.
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 needing requirement details, but does not explicitly mention when not to use or provide alternatives. For a simple lookup tool, 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.
generate_compliance_reportA
Raw PCI DSS v4.0.1 compliance report without AI triage — intended for CI gates, audit artifacts, and requirement-level pass/fail lists. For interactive "scan this project" prompts call triage_findings instead. Default unfiltered call returns a compact summary (metadata, totals, requirement_statuses, top 20 findings per severity, cursor for follow-up). Supply min_severity / rule_filter / limit to get a paged flat list (60 per page with cursor), or cursor= to resume a prior session (10-minute TTL). min_severity / rule_filter drop the response to shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Taint analysis is ON by default; set include_taint=false for fast dev iteration.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the Go project to scan for PCI DSS compliance. If empty, uses current directory (.) | |
| dep_scan_mode | No | Dependency scanner mode: only 'auto' (default) is supported after v0.6.3. Empty value is treated as 'auto'. | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_taint | No | Enable flow-based severity adjustment via go/packages type analysis. When true, panscanner downgrades PAN-KEYWORD and suppresses PAN-TYPE findings for transit-only CHD fields (request/response DTOs, API client models) per and the PCI SSC FAQ on non-persistent memory. Adds 5-30 seconds to scan time. Default true (production-grade precision). Set false for fast dev iteration. Requires 'go' binary on PATH; falls back to AST-only scanning on failure. | |
| min_severity | No | Filter findings by minimum severity. One of CRITICAL / HIGH / MEDIUM / LOW / INFO (case-insensitive). Default: no severity filter. Useful for AI clients that only need HIGH-or-above results. | |
| rule_filter | No | Filter findings by rule ID. Comma-separated list for exact match (e.g. PAN-KEYWORD,PAN-TYPE) OR a single regex in leading/trailing slashes (e.g. /PAN-.*/). Default: no rule filter. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| cursor | No | Opaque cursor token from a prior response. When set, resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: default output structure, effect of filters on response shape, cursor TTL (10 minutes), taint analysis default behavior, dependency on 'go' binary, and fallback to AST-only. It details taint analysis logic (downgrading PAN-KEYWORD, suppressing PAN-TYPE) and suggests when to disable it.
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 well-structured and front-loaded with purpose and usage guidance. Every sentence adds necessary information without redundancy. Despite length, it remains concise and informative.
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 complexity (8 parameters, no annotations, output schema exists), the description is highly complete. It covers response shape, pagination, taint analysis details, fallback behavior, and when to use sibling tool. The output schema handles return value details, so the description focuses on high-level behavior and usage.
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%, but the description adds significant value: explains default path behavior, provides rationale for include_taint, warns against raising limit, describes cursor TTL, and gives usage examples for min_severity and rule_filter syntax. This enriches 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 generates a 'Raw PCI DSS v4.0.1 compliance report without AI triage' for CI gates and audit artifacts, and distinguishes it from triage_findings for interactive use. The verb 'generate' and resource 'compliance report' are 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 provides explicit guidance: 'For interactive prompts call triage_findings instead.' It explains when to use different parameters (min_severity, rule_filter, limit, cursor) and the default summary-first response vs. paginated flat list. It also warns against raising limit above server cap and describes cursor TTL.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_sbomA
Generate a CycloneDX v1.6 SBOM for a Go project. Default behavior: writes sbom.json (or sbom.xml when format=xml) next to the scanned go.mod and returns metadata only (output_path, size_bytes, component_count, unknown_licenses). Override the destination with output_path (must be absolute). Pass inline=true to return the serialized SBOM in the MCP response instead (capped at 64 KB; returns SBOM_TOO_LARGE above that). Parses go.mod + go.sum offline against the local GOMODCACHE; cache-miss modules surface as UNKNOWN-LICENSE. Satisfies PCI DSS 6.3.2 (software inventory, mandatory since March 2025).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Absolute path to the Go project directory containing go.mod (and go.sum) | |
| format | No | Output format: json (default) or xml | |
| output_path | No | Absolute path where the SBOM file should be written. Default: {path}/sbom.json or {path}/sbom.xml. Ignored when inline=true. | |
| inline | No | If true, return serialized SBOM inline in the response (64 KB cap, SBOM_TOO_LARGE on overflow). Default: false, write to file and return metadata only. | |
| fixed_serial | No | Override generated serialNumber. Accepts bare UUID v4 or urn:uuid: form. Use for VEX linking and audit pipeline reproducibility. | |
| no_timestamp | No | If true, omit metadata.timestamp for reproducible builds. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | Yes | |
| bom_format | Yes | |
| spec_version | Yes | |
| component_count | Yes | |
| unknown_licenses | No | |
| format | Yes | |
| generated_at | Yes | RFC3339 UTC |
| project_path | Yes | Absolute scanned path |
| output_path | No | |
| size_bytes | No | |
| serialized_bom | No | |
| fixed_serial | No | Override generated serialNumber (urn:uuid: or bare 36-char form) |
| no_timestamp | No | Omit metadata.timestamp for reproducible builds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, description fully discloses behaviors: default file write, inline option with 64KB cap, cache-miss handling, compliance standard. 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?
Efficiently packed with information in a logical order (purpose, defaults, overrides, inline behavior, edge cases, compliance). Every sentence 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 no annotations and complex functionality, description covers all key aspects: input, output, behavior, limitations, compliance. No gaps for an AI agent to misunderstand.
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 significant meaning: default output path, inline size cap, UUID override, timestamp omission. Adds value beyond 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?
Clearly states it generates a CycloneDX v1.6 SBOM for a Go project, with specific version and project type. Differentiates from sibling tools (other compliance/security tools) by focusing on SBOM 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?
Provides clear context for use (PCI DSS compliance, software inventory) and explains default behavior. Lacks explicit alternatives or when-not-to-use scenarios, but context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_pan_dataA
Default: returns response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 3 per severity findings - plus a pagination.next_cursor for drill-down. Prefer this for mixed queries; min_severity / rule_filter drop to response_shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list. Use include_tests / exclude_patterns for a filtered flat response. Maps findings to PCI DSS 3.3.1, 3.4.1, 3.5.1.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | required,Path to the Go project directory to scan for PAN/CVV data exposure | |
| exclude_patterns | No | Optional glob patterns to exclude. Supports directory patterns (vendor/) and file globs (*.pb.go). Default: vendor/ generated/ *.pb.go testdata/ mocks/ | |
| include_tests | No | Include _test.go files in scan results. Default false excludes test files per industry SAST consensus | |
| include_untracked | No | Scan all files including .gitignored. Default false scans only git-tracked files | |
| include_taint | No | Enable flow-based severity adjustment using go/packages type analysis. When true PAN-KEYWORD/PAN-TYPE findings on transit-only struct fields are downgraded or suppressed. Adds 5-30 seconds. Default false (opt-in for accuracy vs speed) | |
| cursor | No | Opaque cursor token from a prior scan_pan_data response. When set resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. | |
| limit | No | Maximum number of findings to return per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| min_severity | No | Filter by minimum severity (CRITICAL/HIGH/MEDIUM/LOW/INFO). Setting this forces the flat response shape. | |
| rule_filter | No | Filter by rule ID, comma list or /regex/. Setting this forces the flat response shape. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses the two response shapes, the effect of parameters like min_severity/rule_filter, pagination mechanics (session cache TTL, cursor handling), performance implications of include_taint, and the server-enforced cap on limit. 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?
The description is a dense single paragraph that packs a lot of information. While efficient, it could benefit from bullet points or section breaks for easier scanning. Nonetheless, every sentence is meaningful and earns its place.
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 complexity of 9 parameters and an output schema, the description covers all key aspects: default vs. flat response, filtering, pagination, performance trade-offs, and mapping to PCI DSS. It is complete for an AI agent to select and invoke the tool correctly.
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%, but the description adds significant value by explaining default behavior, conditional response shapes, pagination details, and performance costs. For example, it clarifies that include_taint adds 5-30 seconds and that limit exceeding the page size is rejected.
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 for PAN/CVV data exposure and provides a detailed breakdown of the default response shape (summary with counts, histogram, top findings, and pagination cursor). It distinguishes itself from sibling tools by its specific focus and behavior.
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 gives explicit guidance on when to use default vs. filtered modes, how to follow cursors for pagination, and how to use include_tests/exclude_patterns for flat responses. It also mentions mapping to PCI DSS, providing context for compliance use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
triage_findingsA
Run all PCI DSS v4.0.1 scanners + AI-assisted prioritization + file:line enrichment on a Go project in a single call. Default: response_shape "summary" with by_severity counts, a capped by_rule histogram (top 10 + more_rules), and top 1 per severity enriched finding, plus pagination.next_cursor for drill-down. min_severity / rule_filter drop the response to shape "flat" but still carry summary.by_severity + summary.by_rule for full-scan context. Follow the cursor for the full paginated list.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to the Go project to triage. If empty, uses current directory (.) | |
| dep_scan_mode | No | Dependency scanner mode: only 'auto' (default) is supported after v0.6.3. Empty value is treated as 'auto'. | |
| include_tests | No | Include _test.go files in scan results. Default false | |
| include_taint | No | Enable flow-based severity adjustment via go/packages type analysis. When true, panscanner downgrades PAN-KEYWORD and suppresses PAN-TYPE findings for transit-only CHD fields. Adds 5-30 seconds to scan time. Default true (production-grade precision, matches generate_compliance_report). Set false for fast dev iteration. Requires 'go' binary on PATH; falls back to AST-only scanning on failure. | |
| min_severity | No | Filter findings by minimum severity. One of CRITICAL / HIGH / MEDIUM / LOW / INFO (case-insensitive). Default: no severity filter. Applied BEFORE enrichment to save context-collection cost. | |
| rule_filter | No | Filter findings by rule ID. Comma-separated list for exact match (e.g. PAN-KEYWORD,PAN-TYPE) OR a single regex in leading/trailing slashes (e.g. /PAN-.*/). Default: no rule filter. | |
| limit | No | Maximum number of findings to enrich per call. Default 0 (summary-first response with next_cursor). To fetch more findings than fit in one response, follow next_cursor; do NOT raise this value to fetch all at once (server caps at the per-tool page size and rejects with LIMIT_EXCEEDS_PAGE_SIZE). | |
| cursor | No | Opaque cursor token from a prior triage_findings response. When set, resumes pagination from the stored session cache (10-minute TTL). Leave empty for a fresh scan. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavioral traits: response shapes, pagination with cursor, parameter effects (min_severity/rule_filter on shape), limit caps, include_taint's time cost and fallback, and TTL for cursor. This goes beyond what annotations typically provide.
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 dense but appropriately structured. It front-loads the main purpose, then explains default response shape and pagination, followed by parameter details. Every sentence contributes meaningful information 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 tool's complexity (8 parameters, no annotations, output schema present), the description covers all aspects: purpose, response shapes, pagination, parameter interactions, and caveats. It is complete and leaves no major gaps.
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%, but the description adds substantial meaning beyond the schema: default behavior for path, dep_scan_mode version info, include_taint effects and fallback, min_severity timing, rule_filter regex syntax, limit cap warning, and cursor TTL. Each parameter explanation adds unique value.
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: running all PCI DSS v4.0.1 scanners with AI prioritization and enrichment on a Go project. It specifies the verb 'run' and resource 'Go project,' and differentiates from sibling tools (which are individual checks) by offering a comprehensive single-call triage.
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 clear guidance on when to use this tool: for a full triage scan. It explains default behavior and pagination, and implicitly contrasts with sibling tools that focus on single checks. It also advises on parameter usage (e.g., limit, cursor) for fetching more findings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_vulnerability_dbA
Download fresh OSV Go vulnerability snapshot to local cache for offline scanning. Downloads from gs://osv-vulnerabilities/Go/all.zip (~7.5MB). This is the ONLY tool that makes network requests. Cache stored at PCI_MCP_CACHE_DIR or ~/.pci-dss-mcp/vuln-cache/ by default.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | Optional path to save the vulnerability cache. Default: ~/.pci-dss-mcp/vuln-cache/go-osv-{date}.json |
Output Schema
| Name | Required | Description |
|---|---|---|
| cache_path | Yes | Absolute path to the refreshed OSV cache file |
| vuln_count | Yes | Number of vulnerabilities indexed in the new cache |
| download_size_bytes | Yes | Raw download size in bytes |
| previous_cache_date | No | Date of the previous cache (YYYY-MM-DD), empty when no prior cache existed |
| custom_path | No | True when the caller supplied a non-default output_path |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully bears the burden of behavioral transparency. It discloses the download source (gs://osv-vulnerabilities/Go/all.zip), file size (~7.5MB), and default cache location. It does not mention whether old cache is overwritten or if the operation is atomic, but the 'fresh' keyword implies replacement.
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 serving a distinct purpose: action, source/size, and unique differentiator with cache path. No redundant words, front-loaded with the key 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?
Given the simplicity of the tool (one optional parameter, no annotations), the description covers the essential aspects: what it does, where data comes from, and its unique network requirement. An output schema exists, so return values need not be described. A minor gap is the lack of mention about error handling or prerequisites like internet access, but the uniqueness claim implies 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 coverage is 100% for the single parameter, but the description adds value by specifying the default output path and file naming pattern (go-osv-{date}.json). This provides actionable context beyond the schema's description of the 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?
Description clearly states the tool downloads a fresh OSV Go vulnerability snapshot to local cache for offline scanning. The phrase 'This is the ONLY tool that makes network requests' strongly differentiates it from sibling tools, many of which are audit/check tools that operate locally.
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 offline scanning is needed and when a network request is required. It explicitly says 'This is the ONLY tool that makes network requests,' guiding the agent to use it for network-dependent operations. However, it does not explicitly mention when not to use it or provide alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct security check or utility: audit log coverage, authentication strength, data retention, dependencies, encryption, error handling, payment page scripts, secrets, TLS, requirement lookup, compliance report, SBOM, PAN data scan, triage, and vulnerability DB update. No two tools have overlapping purposes.
Tool names follow a clear verb_noun pattern (e.g., check_*, generate_*, explain_*, update_*, scan_*, triage_). All use consistent snake_case, and the verb clearly indicates the action. The slight deviation of 'audit_log_coverage' is minor and still descriptive.
15 tools is well-scoped for a PCI DSS compliance server. It covers a wide range of checks (authentication, encryption, secrets, etc.) plus utilities (SBOM, report, requirement lookup), without being excessive or too few.
The tool set comprehensively covers PCI DSS requirements relevant to Go source code and configuration, including authentication (8.3), data retention (3.2, 3.3), encryption (4.2, 6.2), error handling (6.2), TLS (4.2), secrets (8.6), dependencies (6.3), and software inventory (6.3). The triage and report tools tie everything together.
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.
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
Scans remote MCP servers for protocol, security, and TLS issues; exposes scan tools via MCP.
MCP server for static security analysis of Android source code
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceGo-based SBOM, vulnerability, and secret scanner with MCP support.3Apache 2.0
- AlicenseAqualityCmaintenanceAn AppSec-focused MCP server that performs static analysis scans on C/C++ source code for memory-safety vulnerabilities and parses compiled PE/ELF binary headers locally to audit active defensive compiler mitigations (ASLR, DEP/NX, PIE).41MIT
- AlicenseAqualityDmaintenanceAgent-native "safe to ship?" security gate for AI-generated code. Uses real parsers and inter-rocedural taint analysis (JS/TS, Python, Go) to flag the classes AI coding agents get wrong — secrets, SQL injection, SS, SSRF, path traversal, command injection, weak JWT/CORS — and ranks findings by confidence. Exposes a scan tool over MCP.1102MIT
- AlicenseAqualityCmaintenanceA production-grade security auditing MCP server that wraps semgrep (SAST) and gitleaks (secret detection) to enable one-click code security scanning via MCP stdio protocol.114MIT
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/shyshlakov/pci-dss-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server