stepsecurity-mcp
OfficialThe StepSecurity MCP server exposes StepSecurity's platform APIs as LLM-callable tools for investigating supply-chain and CI/CD security issues in plain English.
Meta / Server Info
describe_capabilities– Self-describing summary of server capabilitiesping– Verify server reachabilityget_my_tenant– Confirm the configured StepSecurity tenantlist_tenant_github_orgs– List all GitHub orgs under your tenant
Threat Center
list_threat_incidents/get_threat_incident– List and detail supply-chain incidents, including compromised packages and C2 IOCs
Exposure & IOC Checks
Check if malicious npm/PyPI packages were used in CI or on developer machines
check_ioc_in_baseline– Search an org's Harden-Runner baseline for a domain/IP IOCfind_endpoint_calls_in_tenant– Tenant-wide search for workflows contacting a given endpointsearch_action_usage– Find which workflows use a specific GitHub Action (useful when one is reported compromised)
Detection Browsers (Tenant-Wide)
Browse anomalous network calls, blocked egress, HTTPS outbound calls, suspicious process events, imposter commit detections, secrets in build logs, and other detection types
Auditing & Inventory
list_recent_workflow_runs– Last 100 Harden-Runner-monitored runs for an org/repolist_github_api_calls_in_run– Audit every GitHub API call in a specific workflow run, grouped by job/stepfind_repos_using_endpoint– Find all repos in an org whose baseline contains a given endpoint
Suppression Rules (Read/Write)
List, get, preview, and analyze suppression rules
analyze_anomalous_calls_by_process– Group anomalous calls by process to identify suppression candidatesCreate, update, and delete suppression rules (write operations require user confirmation and an admin-scoped API key)
Allows checking if any workflow runs in the tenant contacted endpoints like bun.sh, useful for inventory and migration questions.
Enables analysis of anomalous network calls to identify Cloudflare WARP (cloudflared) traffic, aiding in suppression rule creation.
Provides tools to search for usage of specific GitHub Actions across repositories, audit GitHub API calls made by workflow runs, and list recent workflow runs.
Allows checking if a specific npm package is used across repositories and developer machines, useful for supply-chain incident response.
Enables analysis of anomalous network calls to identify OpenVPN traffic, aiding in suppression rule creation.
Allows checking if a specific PyPI package is used across repositories and developer machines, useful for supply-chain incident response.
Enables analysis of anomalous network calls to identify Tailscale VPN traffic, aiding in suppression rule creation.
Enables analysis of anomalous network calls to identify WireGuard traffic, aiding in suppression rule creation.
Enables analysis of anomalous network calls to identify ZeroTier VPN traffic, aiding in suppression rule creation.
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., "@stepsecurity-mcpAm I affected by the axios supply-chain incident?"
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.
stepsecurity-mcp
Model Context Protocol (MCP) server for the StepSecurity platform. Exposes a curated set of StepSecurity APIs as LLM-callable tools so you can investigate supply-chain and CI/CD security issues in plain English from Claude Desktop, Claude Code, Cursor, or any other MCP client.
Requirements
Node.js 22+
A StepSecurity API key
Your StepSecurity customer/tenant identifier (see Configure)
Related MCP server: armorcode-mcp
Install
No install needed for most users — wire the published package into your MCP client via npx (see Wire into an MCP client below). npx will fetch @stepsecurity/stepsecurity-mcp from npm on first run.
To hack on the server locally instead:
git clone git@github.com:step-security/stepsecurity-mcp.git
cd stepsecurity-mcp
npm install
npm run buildConfigure
Get an API key
Go to the StepSecurity admin console for your tenant and create a key:
https://app.stepsecurity.io/<tenant>/admin-console/integrations/stepsecurity-apiReplace <tenant> with your StepSecurity tenant name (the same value you'll put in STEP_SECURITY_CUSTOMER).
StepSecurity supports read-only tenant API keys — recommended for this MCP server since every tool shipped here is read-only (list / get / search). Use a read-only key unless you have a specific reason to grant write access.
Env vars
Variable | Required | Default | Purpose |
| yes | — | Your API key. Sent as |
| strongly recommended | — | Your tenant identifier. When set, |
| no |
|
|
Copy .env.example to .env for manual runs. For MCP clients, set the same values via the env block of the client config (next section).
Wire into an MCP client
Claude Code
Add to your project's .mcp.json (or user-level ~/.claude.json):
{
"mcpServers": {
"stepsecurity": {
"command": "npx",
"args": ["-y", "@stepsecurity/stepsecurity-mcp"],
"env": {
"STEP_SECURITY_API_KEY": "${STEP_SECURITY_API_KEY}",
"STEP_SECURITY_CUSTOMER": "your-tenant-name"
}
}
}
}If you're developing locally, swap command to node and args to ["/absolute/path/to/stepsecurity-mcp/dist/server.js"].
Restart, then run /mcp to confirm the server connected.
Claude Desktop
Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) with the same shape, then restart Claude Desktop.
MCP Inspector (no-LLM debugging)
Fastest iteration loop — browse the tool list, fill args, see raw JSON-RPC:
STEP_SECURITY_API_KEY=... STEP_SECURITY_CUSTOMER=... npm run inspectOpens a web UI at http://localhost:6274.
Scenarios
The LLM chains multiple tool calls from one prompt — you don't need to know tool names. Ask any of the following in natural language:
1. Respond to a supply-chain incident
You heard about a malicious npm release or a compromised Action. Ask whether your tenant is affected. The LLM will: pull the incident from StepSecurity's threat center → read its "Am I Affected?" section → fan out to CI exposure, developer machines, and baseline IOC checks in parallel.
Try:
"Am I affected by the axios supply-chain incident?" (npm)
"Check exposure for the xinference PyPI compromise." (pypi)
"Check exposure for the trivy compromise." (compromised GitHub Action)
"There's a new malicious release mentioned on HN — anything in our threat center matching?"
Tools used behind the scenes: list_threat_incidents, get_threat_incident, and per-ecosystem exposure tools (check_npm_package_exposure + check_npm_package_on_dev_machines for npm, check_pypi_package_exposure + check_python_package_on_dev_machines for pypi), plus check_ioc_in_baseline / find_endpoint_calls_in_tenant for C2 indicators and search_action_usage for compromised Actions.
There's also a slash-prompt you can invoke explicitly in Claude Desktop: am-i-affected (args: org, incident) — expands into a guaranteed step-by-step investigation plan.
2. Browse recent detections in your tenant
Tenant-wide sweep of Harden-Runner detections across every org installed under your customer. Every detection returned includes a dashboard_url deep-link to the exact tab on the run page so you can click through to investigate.
Try:
"What are the recent detections in StepSecurity for my tenant?" — sweeps all six detection types in parallel.
"Show me any anomalous network calls."
"Were any secrets leaked in build logs?"
"Which domains got blocked this week?"
"Any imposter-commit detections I should look at?"
One tool per common detection type, all defaulting to tenant scope:
Tool | Detection type | Links to |
| New outbound calls off the baseline |
|
| Egress-policy blocks |
|
| HTTPS calls with method + path |
|
| Memory-read, reverse-shell, privileged container |
|
| Action pinned to a non-tag/non-branch SHA |
|
| Secret patterns in CI logs (masked) |
|
| Generic escape hatch for less-common types (source-code overwritten, harden-runner-config-changed, agent-tampered, etc.) | — |
3. Check a specific IOC
You have a domain or IP (e.g. from a threat feed) and want to know if any workflow contacted it.
Try:
"Was the C2 domain
sfrclak.comseen in our Harden-Runner baseline?" (single org)"Did any job across our tenant contact
registry.npmjs.org?" (tenant-wide)"Which workflow runs hit
142.11.206.73?"
Tools:
check_ioc_in_baseline(owner, indicator)— single org, server-side substring match. Each observation has adashboard_urllinking to the run's network-events tab.find_endpoint_calls_in_tenant(endpoint, customer?)— tenant-wide. Lists orgs then fans out per org with bounded concurrency. Returns a flat list of{org, repo, workflow, job, run_id, timestamp, dashboard_url}observations.
4. Audit usage of a specific GitHub Action
Triage when an Action is reported compromised.
Try:
"Which workflows use
aquasecurity/trivy-action?""Where is
tj-actions/changed-filesreferenced across our repos?"
Tool: search_action_usage (returns per-workflow pinning detail + upstream release info).
5. Audit GitHub API calls a workflow run made
You want to see every github.com / api.github.com call a specific run touched — catching writes to repos outside the org, surprising cross-org access, or API calls from third-party Actions.
Try:
"What GitHub API calls did the latest run of
trivy-scanin<org>/<repo>make?""Audit the API footprint of the most recent CI run in
<org>/<repo>.""For run 23336327796 of
<org>/<repo>, which GitHub API endpoints were called?"
Tools: list_recent_workflow_runs(owner, repo?) to find the run ID (when the user doesn't give one), then list_github_api_calls_in_run(owner, repo, runId) — single upstream call, grouped by job with step/tool attribution. The LLM will chain the two automatically if you phrase the question as "the latest run" or "yesterday's run".
6. Find every repo in an org contacting a given endpoint
You want to answer inventory / migration questions: "who still uses registry.npmjs.org?", "which repos contact bun.sh?".
Try:
"Which repos in
<org>contactbun.sh?""Find all repos still calling
registry.npmjs.org."
Tool: find_repos_using_endpoint(owner, endpoint, concurrency?) — fans out one baseline query per repo with bounded parallelism (default 10 in flight). Tens of seconds on large orgs. Returns only the matching repos, each with a baseline deep-link.
For a tenant-wide sweep across every org installed under your customer, first call list_tenant_github_orgs (takes customer optionally, falls back to STEP_SECURITY_CUSTOMER) to get the org list, then run find_repos_using_endpoint per org. The LLM will compose these when you ask something like "which repos across our tenant still use registry.npmjs.org?".
find_repos_using_endpoint(org-wide, repo-attributed) vscheck_ioc_in_baseline(single org, flat endpoint list): use the former when you want a per-repo inventory, the latter for quick IOC triage.
7. Triage detections and add suppression rules (write)
You want to analyze past detections — most often anomalous outbound network calls — decide which are false positives, and suppress them at the right scope. The LLM proposes rules, shows you the impact before anything writes, and only executes after you say yes.
Try:
"Analyze anomalous network calls across our tenant and suggest suppression rules for false positives."
"Suppress anomalous calls to
registry.npmjs.orgfrom thenpm-installjob in orgmy-org.""Show me all suppression rules configured for our tenant."
Tools (read):
analyze_anomalous_calls_by_process— tenant-wide: groups anomalies by calling process, flags VPN / mesh-networking daemons (tailscaled, twingate, zerotier-one, netbird, cloudflared, warp-svc, openvpn, wireguard) as strong candidates for a single process-scoped rule. One such rule matches both domain and direct-IP anomalies from that process (rule conditions withoutendpointorip_addressact as wildcards server-side). Other processes (dockerd, containerd, snapd, curl, kubelet, etc.) are returned too but not flagged — they deserve per-destination review.list_suppression_rules,get_suppression_rulepreview_suppression_rule(detectionId, conditions)— approximate client-side dry-run. Returns the detections that would be suppressed (count + sample with dashboard links).
Tools (write — require confirm: true and an admin-scoped API key):
create_suppression_rule— creates the rule. Server retroactively suppresses matching past detections synchronously; tool reports how many were moved.update_suppression_rule,delete_suppression_rule.
Never-suppress list:
gist.github.comandgist.githubusercontent.comare commonly used by attackers for payload delivery and exfiltration. The tools will refuse to create a rule that directly targets these hosts, andpreview_suppression_rulewill flag a warning if a broader rule would incidentally silence calls to them. Scope matters for auth: tenant-wide rules (conditions.owner = "*") require tenant admin. Org-level rules (owner = "<org>",repo = "*") require admin on that org. If you get403, the tool surfaces a clear message explaining to swap to an admin key or narrow the scope. Severity: onlyignore(pure suppression) is supported in the backend; the tool hardcodes it. Deletion doesn't un-suppress. Detections already moved to suppressed state stay that way after the rule is deleted.
8. Confirm your configured tenant
When in doubt about which tenant the tools are hitting.
Try:
"What's my tenant?"
"Which customer is this MCP server scoped to?"
Tool: get_my_tenant (reports the configured STEP_SECURITY_CUSTOMER and links to the tenant admin console).
Tool reference (all tools)
Grouped by area. Run describe_capabilities from the LLM for a self-describing summary.
Meta —
describe_capabilities,ping,get_my_tenantThreat center —
list_threat_incidents,get_threat_incidentExposure checks —
check_npm_package_exposure,check_npm_package_on_dev_machines,check_pypi_package_exposure,check_python_package_on_dev_machines,check_ioc_in_baseline,find_endpoint_calls_in_tenant,search_action_usageDetection browsers (tenant-wide) —
list_anomalous_network_calls,list_blocked_domain_calls,list_https_outbound_calls,list_suspicious_process_events,list_imposter_commit_detections,list_secrets_in_build_log,list_detectionsAuditing / inventory —
list_recent_workflow_runs,list_github_api_calls_in_run,find_repos_using_endpoint,list_tenant_github_orgsSuppression rules (write) —
list_suppression_rules,get_suppression_rule,preview_suppression_rule,analyze_anomalous_calls_by_process,create_suppression_rule,update_suppression_rule,delete_suppression_rule
Development
npm run dev # watch mode with tsx
npm run typecheck
npm run test
npm run buildProject layout
src/
server.ts MCP bootstrap (stdio transport) + server-level instructions
config.ts env loading (API key, customer, dashboard host)
logger.ts stderr-only JSON logger (stdout is reserved for JSON-RPC)
client.ts thin fetch wrapper with Bearer-auth injection
tools/
index.ts tool registry
describe.ts describe_capabilities
tenant.ts get_my_tenant
threat-center.ts incident + exposure-check tools
detections.ts per-type detection browsers (+ dashboard deep-links)
ping.ts
prompts/
index.ts am-i-affected slash-promptAvailable Tools
30 toolsanalyze_anomalous_calls_by_processA
Group tenant-wide anomalous network-call detections by the calling process. Goal: spot VPN / mesh-networking daemons (tailscaled, twingate, zerotier-one, netbird, cloudflared, warp-svc, openvpn, wireguard) that are legitimately fanning out to many peer IPs and coordination endpoints as normal operation. For those, a single process-scoped rule suppresses both domain AND direct-IP benign anomalies with one rule. Returns per-process: count, distinct endpoints, distinct direct IPs, sample detections (with dashboard links), and a suggested single suppression rule. When a VPN process appears (is_vpn_process_candidate=true), propose a process-wide rule (just {process: , owner: '*', ...}). Do NOT auto-propose process-wide rules for other processes (dockerd, containerd, snapd, curl, etc.) — those can make security-relevant calls and deserve per-destination review.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| minCount | No | Hide processes with fewer than this many anomalies (default: 2). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses behavior: it returns per-process data and suggests suppression rules, including the logic for auto-proposing process-wide rules for VPN processes. It does not mention side effects or permissions, but the tool appears read-only.
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 paragraph but well-organized: first the goal, then specific guidance, then return details. It is informative without being overly verbose, though 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 no output schema, the description fully explains the return structure: per-process count, distinct endpoints, distinct direct IPs, sample detections with dashboard links, and a suggested suppression rule. It also covers the logic for VPN processes. Sibling tools provide additional context.
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 extra meaning beyond what's in the schema for the two parameters (customer and minCount). The mention of env var fallback is already in the schema description.
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 that the tool groups anomalous network-call detections by process, aiming to identify VPN/mesh-networking daemons. It distinguishes from siblings like list_anomalous_network_calls and create_suppression_rule by specifying it returns per-process statistics and suggests suppression rules.
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?
Explicit guidance on when to use (spot VPN daemons) and when not to (do not auto-propose process-wide rules for other processes like dockerd). It also explains that for VPN processes, a single rule suppresses both domain and direct-IP anomalies.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ioc_in_baselineA
Search the Harden-Runner org baseline for a domain or IP indicator of compromise. Uses the server-side search query (case-insensitive substring) so only matching endpoints come over the wire. Returns which repos/workflows/runs contacted the endpoint; each observation has a dashboard_url — when presenting results you MUST include a clickable link per observation, not just the first one. For a tenant-wide search across every org under your customer, use find_endpoint_calls_in_tenant instead.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| indicator | Yes | Domain or IP substring to match against observed endpoints |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite no annotations, the description reveals key behavior: it uses a server-side case-insensitive substring search, returns only matching endpoints, and provides observation data including a dashboard_url. It implies read-only operation with no destructive 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?
Three well-structured sentences: purpose, mechanism, and result presentation instruction with alternative tool. No redundancy, every sentence adds essential information, and the most critical detail (what it does) 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 no output schema, the description explains what is returned (repos/workflows/runs contacted the endpoint, each with dashboard_url). It also covers both parameters and their purpose. The tool is simple (2 params, no nested objects) and the description is sufficient for an agent to invoke it 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 meaning beyond the input schema by explaining that 'owner' is the GitHub org and 'indicator' is a domain or IP substring. Also notes the search is case-insensitive, which is not in the schema. With 100% schema coverage, this extra context is valuable.
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 searches the Harden-Runner org baseline for domain/IP indicators of compromise. It distinguishes itself from the sibling tool 'find_endpoint_calls_in_tenant' by specifying the scope (single org vs tenant-wide), providing a specific verb and resource.
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 provides an alternative tool ('find_endpoint_calls_in_tenant') for tenant-wide searches, guiding when to use this tool. Also instructs on how to present results with clickable links for each observation, clarifying behavioral expectations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_npm_package_exposureA
Org-wide (CI-side) 'Am I Affected?' check for an npm package. Searches all monitored repos — workflow runs, PRs, and default branches — for uses of the package at the given versions. Pass an empty versions array to match any version. IMPORTANT: this only covers CI. For a complete 'am I affected' answer, also call check_npm_package_on_dev_machines in parallel to cover developer laptops.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| packageName | Yes | npm package name, e.g. '@velora-dex/sdk' | |
| versions | No | Specific versions to check. Omit or empty to match any version. | |
| seenOnlyInPrs | No | Restrict results to PR-only sightings | |
| startTime | No | Unix timestamp (seconds) — lower bound | |
| endTime | No | Unix timestamp (seconds) — upper bound |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description discloses search scope (workflow runs, PRs, default branches) and CI-only limitation. Could mention it's read-only but overall adequate.
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 purpose, then adds critical use guidance. 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?
Missing description of return value or output format. Without output schema, agent cannot infer what results look like. Other aspects covered well.
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. Adds value by clarifying empty versions array behavior and showing example package name format ('@velora-dex/sdk').
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's an 'Am I Affected?' check for npm packages on CI side, distinguishing it from developer machine checks. Uses specific verb 'searches' and resource 'monitored repos'.
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 guides when to use: 'Org-wide (CI-side)' and provides crucial instruction to call a sibling tool for complete coverage. Includes 'IMPORTANT' note with alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_npm_package_on_dev_machinesA
Developer-machine 'Am I Affected?' check for an npm package. Searches across all enrolled developer laptops (Dev Machine Guard) for installs of the package. Complements check_npm_package_exposure — CI and dev machines are INDEPENDENT exposure surfaces, so when investigating a malicious-package incident you MUST check both. Uses the StepSecurity customer/tenant identifier (optional — falls back to STEP_SECURITY_CUSTOMER env var). The server's version filter is not applied — pass versions to filter results client-side to specific compromised versions, otherwise all installs are returned.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| packageName | Yes | npm package name | |
| versions | No | Specific versions to match (exact string compare). Omit to return all installs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the server's version filter is not applied, requiring client-side filtering. It also mentions the fallback to an environment variable. However, it does not discuss potential rate limits or performance implications, which could be relevant for an enterprise 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 well-structured, starting with a clear purpose, then relating to siblings, then detailing parameters. It is somewhat verbose but each sentence adds value. It could be slightly more concise, but overall effective.
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 output schema and no annotations, the description covers the tool's purpose, usage context, parameter details, and behavior. It explains the relationship to a sibling tool and the client-side filtering requirement. Missing details like output format or error handling, but for a search/check tool, it is fairly 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 already describes all three parameters with 100% coverage. The description adds value by clarifying that 'customer' is optional and falls back to an env var, and that 'versions' performs exact string match and can be omitted to return all installs. This complements the schema well.
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 the tool checks for npm package installs on developer machines. It distinguishes itself from the sibling tool 'check_npm_package_exposure' by clarifying that CI and dev machines are independent surfaces, and both must be checked during incident investigation.
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 on when to use the tool: when investigating a malicious-package incident, you MUST check both this and 'check_npm_package_exposure'. It also explains optional parameters like customer and versions, and the fallback to environment variable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_pypi_package_exposureA
Org-wide (CI-side) 'Am I Affected?' check for a PyPI (Python) package. Searches all monitored repos — workflow runs, PRs, and default branches — for uses of the package at the given versions. Pass an empty versions array to match any version. IMPORTANT: this only covers CI. For a complete 'am I affected' answer, also call check_python_package_on_dev_machines in parallel to cover developer laptops. Use this (not check_npm_package_exposure) when the threat-center incident's ecosystem is 'pypi'.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| packageName | Yes | PyPI package name, e.g. 'xinference', 'requests' | |
| versions | No | Specific versions to check. Omit or empty to match any version. | |
| seenOnlyInPrs | No | Restrict results to PR-only sightings | |
| startTime | No | Unix timestamp (seconds) — lower bound | |
| endTime | No | Unix timestamp (seconds) — upper bound |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description clearly states limitation: 'this only covers CI' and lists scopes (workflow runs, PRs, default branches). Does not discuss rate limits or auth, but scope is fully 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?
Three dense sentences with zero waste. Each sentence adds critical info: scope, version handling, sibling differentiation, and cross-tool guidance.
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 output schema, description could mention return format, but purpose and behavior are well-covered. Agent can decide when and how to call correctly. Missing return info is minor.
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. Description adds value by explaining empty versions behavior, which matches schema. No additional semantics for other parameters 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's an org-wide CI-side check for a PyPI package, with verb 'check' and resource 'package exposure'. Distinguishes from sibling like check_npm_package_exposure by specifying ecosystem 'pypi'. Explains version matching behavior with empty array.
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 says use this when ecosystem is 'pypi' and not npm. Provides critical guidance to also call check_python_package_on_dev_machines for complete coverage, since this only covers CI.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_python_package_on_dev_machinesA
Developer-machine 'Am I Affected?' check for a PyPI (Python) package. Searches across all enrolled developer laptops (Dev Machine Guard) for installs of the package. Complements check_pypi_package_exposure — CI and dev machines are INDEPENDENT exposure surfaces, so for a malicious-PyPI-package incident you MUST check both. The server's version filter is not applied — pass versions to filter results client-side to specific compromised versions, otherwise all installs are returned.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| packageName | Yes | PyPI package name | |
| versions | No | Specific versions to match (exact string compare). Omit to return all installs. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses that version filtering is not applied server-side and must be done client-side via the 'versions' param, and that omitting it returns all installs. Lacks details on rate limits or authentication, but sufficiently covers key behavior for a check 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?
Two sentences with no waste. Purpose stated first, then behavioral nuance and usage guidance. Every sentence contributes 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 no output schema, description adequately covers purpose, behavior (client-side filtering), and relationship to sibling. Parameter usage is clarified. Completely sufficient for agent decision-making.
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 3. Description adds value by clarifying that the 'versions' parameter filters client-side (not server-side) and that omitting it returns all installs. For 'customer', description restates schema info. Overall, description provides moderate added meaning.
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 it's a check for a PyPI package on developer machines, using action verb 'check' and resource 'PyPI package on dev machines'. Differentiates from sibling check_pypi_package_exposure by specifying it covers dev machines.
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 says 'for a malicious-PyPI-package incident you MUST check both' this tool and check_pypi_package_exposure, providing clear when-to-use guidance. Also explains independence of exposure surfaces.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_suppression_ruleA
Create a suppression rule. WRITE OPERATION — requires confirm: true and a read-only API key will 403. Before calling this, you MUST call preview_suppression_rule with the same conditions and show the user the expected impact. Creating a rule also retroactively suppresses matching past detections (synchronous server-side). After creation the tool verifies how many past detections were moved. Severity action is hardcoded to 'ignore' (only type the backend supports).
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| detectionId | Yes | Detection type the rule targets, e.g. 'New-Outbound-Network-Call'. This becomes the rule's `id` field. | |
| name | Yes | Short human-readable rule name | |
| description | No | Longer rationale for the rule | |
| conditions | Yes | Match conditions. owner/repo/workflow/job are auto-filled with '*' if omitted. Include type-specific keys (endpoint, ip_address, process, host, file, file_path, secret_type, action) as needed. | |
| confirm | Yes | Set to true to actually execute the write. Any other value (including omitted) returns an error — this is a safety check so the LLM cannot write without explicit user approval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses write nature, confirm requirement, retroactive suppression of past detections, synchronous server-side processing, verification of moved detections, and hardcoded severity action. Lacks mention of idempotency or error states, 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?
Five sentences, front-loaded, every sentence adds essential guidance. No redundant or extraneous information. Highly 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 (6 params, nested conditions) and no output schema, the description covers prerequisites, behavior, and hardcoded settings. However, it does not specify what the tool returns upon success (e.g., created rule details or confirmation message), which would help an agent understand the response.
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 already described. The description adds value by noting that conditions auto-fill owner/repo/workflow/job with '*' and including type-specific keys, and explaining the confirm safety check. This is modest extra context, meeting the baseline for high coverage.
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 'Create a suppression rule' with a specific verb and resource, distinguishing it from sibling tools like preview, delete, update, list, and get. It also emphasizes this is a WRITE 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?
Explicitly instructs to call preview_suppression_rule first with same conditions and show the user the expected impact. Also warns about read-only API keys and the need for confirm: true, leaving no ambiguity about prerequisites and execution conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_suppression_ruleA
Delete a suppression rule. WRITE OPERATION — requires confirm: true. NOTE: deleting a rule does NOT un-suppress detections it previously matched; they remain in the suppressed state with the deleted rule_id attached.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| ruleId | Yes | Rule id to delete | |
| confirm | Yes | Set to true to actually execute the write. Any other value (including omitted) returns an error — this is a safety check so the LLM cannot write without explicit user approval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses critical behavioral traits: it's a write operation, requires confirmation, and importantly notes that deletion does not reverse prior suppressions. This goes beyond the schema and addresses a key side effect.
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 sentences. First sentence states the core purpose; second sentence adds a critical behavioral note. No fluff, 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?
Covers the key behavioral aspect of deletion. Missing is what the return value or success response looks like, but for a delete operation, it is sufficient. The schema fully documents parameters.
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 little beyond what is already in the schema. It mentions the confirm requirement but doesn't elaborate on parameter 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?
Clearly states the verb 'Delete' and the resource 'suppression rule', distinguishing it from sibling tools like create, update, list, and preview. The purpose is unambiguous and specific.
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 instructions on when to use this tool versus alternatives. Implicit from the name, but lacks guidance on prerequisites or timing. The behavioral note about not unsuppressing is useful for decision-making.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
describe_capabilitiesA
Describe what this MCP server can do and how to use it. Call this when the user asks 'what can you do?', 'what does this server support?', or is otherwise unsure how to start.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It correctly indicates a read-only descriptive operation but adds no extra behavioral context beyond the obvious.
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, front-loaded with action and context. Every word earns its place; 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?
Given no parameters, no output schema, and no annotations, the description fully covers the tool's role and usage context.
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 no parameters with 100% coverage. Baseline score of 3 is appropriate; description adds no parameter info as none exist.
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 verb 'describe' and resource 'what this MCP server can do and how to use it'. It distinguishes from siblings by focusing on overall server capabilities, not specific actions.
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 says when to call: when user asks 'what can you do?' or is unsure how to start. No exclusions or alternatives needed since it's a unique introductory tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_endpoint_calls_in_tenantA
Find every workflow-run observation of a given network endpoint across EVERY GitHub org installed under the tenant. Takes an endpoint substring (domain or IP), lists the tenant's orgs, and fans out a baseline search per org with bounded concurrency. Returns a flat list of observations: {org, repo, workflow, job, run_id, timestamp, dashboard_url}. Use this instead of check_ioc_in_baseline when the user asks 'did anyone in our tenant contact X?'. When presenting results you MUST include a clickable dashboard_url per observation.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| endpoint | Yes | Endpoint substring to match against observed endpoints, e.g. 'registry.npmjs.org', '8.8.8.8' | |
| concurrency | No | Max parallel org requests (default: 5) | |
| observationsPerOrg | No | Cap on observations returned per matching org endpoint (default: 50) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses fan-out across orgs, bounded concurrency via parameter, and return format including dashboard_url. It also instructs the agent to include clickable links in results. Missing details like rate limits or error handling, but sufficient 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?
Four sentences with each serving a purpose: purpose, methodology, usage alternative, output presentation rule. Front-loaded with core action. 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?
No output schema, so description explains return structure (flat list, fields). Covers process and constraints. Slight gap in error scenarios or edge cases, but overall complete for a search 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%, baseline 3. The description adds beyond schema by explaining endpoint is a substring, concurrency bounded 1-20, observationsPerOrg caps per-org results. This extra context justifies a 4.
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 finds observations of a network endpoint across all GitHub orgs in a tenant. It specifies the action (find), resource (workflow-run observations), and scope (every org). It also distinguishes itself from sibling tool check_ioc_in_baseline by name-dropping it.
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?
Explicit guidance: 'Use this instead of check_ioc_in_baseline when the user asks "did anyone in our tenant contact X?"' This provides a concrete when-to-use scenario. No when-not-to is stated, 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.
find_repos_using_endpointA
Find every repo in an org whose Harden-Runner baseline contains a given network endpoint (domain or IP, substring match). Useful for questions like 'which repos contact bun.sh?', 'who still uses registry.npmjs.org?', or migration planning. Fans out one request per repo with bounded concurrency — expect 10–60 seconds on orgs with many repos. Returns only repos that matched — each one has a baseline_url which you MUST surface as a clickable link per repo (not just the first one). NOTE: this tool is single-org. For a tenant-wide sweep, first call list_tenant_github_orgs and then call this per org.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| endpoint | Yes | Endpoint substring to search for, e.g. 'bun.sh:443', 'registry.npmjs.org', '8.8.8.8' | |
| concurrency | No | Max parallel requests (default: 10) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully discloses fan-out with bounded concurrency, expected delay (10–60 seconds), return behavior (only matched repos), and the requirement to surface baseline_url as clickable links per repo. It also clarifies the single-org limitation.
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 front-loaded with purpose, then use cases, then technical details. It is efficient with multiple sentences, each earning its place, though it could be slightly more concise without losing meaning.
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 no output schema, the description explicitly describes the return format (list of repos with baseline_url) and provides instructions for surfacing results. It also covers concurrency, time expectations, and multi-org workflow, making it fully complete for the tool's 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 coverage is 100%, so baseline is 3. The description adds value by emphasizing substring matching for endpoint, stating the default concurrency of 10, and bounding concurrency with a max of 50. This goes slightly 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 finds repos in an org whose Harden-Runner baseline contains a given network endpoint via substring match. It uses a specific verb ('Find') and resource ('repos'), and the context (single-org, substring match) distinguishes it from siblings like check_ioc_in_baseline or check_npm_package_exposure.
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 use-case examples ('which repos contact bun.sh?') and addresses multi-org scenarios by referencing list_tenant_github_orgs. However, it does not directly compare with sibling tools or state 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.
get_my_tenantA
Return the StepSecurity customer/tenant identifier configured on this MCP server, along with a link to the tenant's admin console. Call this when the user asks 'what's my tenant?', 'which customer am I scoped to?', or wants to confirm the default before a detection sweep. Reads the STEP_SECURITY_CUSTOMER env var set in the MCP client config.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, but description adequately discloses it reads STEP_SECURITY_CUSTOMER env var, is read-only, and non-destructive. Could mention error cases like missing env var, but sufficient for a simple config query.
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, front-loaded with action. No redundancy or irrelevant details.
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?
No output schema, but purpose is simple. Description covers purpose, usage trigger, and data source. Minor omission: no mention of error handling for missing env var, 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?
No parameters, so baseline is 4. Description adds value by explaining return value and configuration source.
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 returns the tenant identifier and admin console link. The verb 'Return' and resource 'tenant identifier' are specific. Among siblings like 'describe_capabilities', no overlap exists.
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 states when to call (user queries about tenant) and mentions it reads an environment variable. Does not specify when not to use alternatives, but context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_suppression_ruleB
Get one suppression rule by id. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| ruleId | Yes | Rule id (UUID) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description says 'Read-only,' which hints at safety, but with no annotations, more detail would be beneficial. It does not disclose error handling, authentication needs, or what happens if the rule does not exist.
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 at only two short sentences. Every word adds value, no fluff. It is front-loaded and 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?
For a simple get-by-ID tool with no output schema and full schema coverage, the description is minimally adequate. It explains the operation and read-only nature but omits return value context and error scenarios.
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 provides full descriptions for both parameters (100% coverage). The description adds no additional meaning beyond what the schema provides, 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 it retrieves a single suppression rule by ID and indicates it is read-only. However, it does not differentiate from sibling tools like list_suppression_rules or preview_suppression_rule, which could cause confusion for an AI agent.
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 such as list_suppression_rules or preview_suppression_rule. An agent might not know this is appropriate only when a specific rule ID is known.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_threat_incidentA
Get full details of one threat-center incident — including the 'Am I Affected?' markdown section which lists the EXACT compromised package names + versions and C2 IOCs (domains/IPs) to check. Call this after list_threat_incidents to extract the concrete things to search for. The incident's ecosystem field ('npm' or 'pypi') dictates which exposure tools to call: for npm → check_npm_package_exposure + check_npm_package_on_dev_machines. For pypi → check_pypi_package_exposure + check_python_package_on_dev_machines. Always also call check_ioc_in_baseline for each C2 domain/IP mentioned, regardless of ecosystem.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| incidentId | Yes | Incident UUID from list_threat_incidents |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description carries full burden. It describes what the return includes (compromised packages, IOCs), but doesn't explicitly state read-only nature or auth requirements, though implied.
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 filler; second sentence is a bit long but packs useful instructions. Efficient overall.
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?
No output schema, but description explains return content (markdown with exact data). Complete enough for agent to know what to expect.
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 context (e.g., incidentId from list_threat_incidents) but not significantly more than 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?
Description clearly states 'Get full details of one threat-center incident' with specific content (markdown section), distinguishing it from sibling list_threat_incidents.
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 says to call after list_threat_incidents, and gives detailed follow-up actions based on ecosystem (npm vs pypi) and always check_ioc_in_baseline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_anomalous_network_callsA
List anomalous outbound network-call detections across the tenant (all orgs installed under the customer). 'Anomalous' = a destination endpoint was contacted that is NOT in the repo's Harden-Runner baseline of allowed endpoints — a common indicator of supply-chain exfiltration. Typically the most-used detection type during an investigation. Every result has a dashboard_url — when you present detections to the user you MUST include a clickable link per detection, not just the first one.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — if omitted, falls back to STEP_SECURITY_CUSTOMER env var. Returns detections aggregated across ALL GitHub orgs installed under this tenant. | |
| status | No | Detection status filter. Defaults to 'new'. | |
| limit | No | Max detections to return (1-200). Defaults to 50. | |
| orgScope | No | Optional: restrict to a single GitHub org under this tenant (uses the owner-scoped endpoint instead of tenant-wide). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that results are tenant-wide (across all orgs) and every result has a dashboard_url. It does not mention ordering, pagination, rate limits, or whether the tool is idempotent/safe. As a read operation, the description provides adequate but not comprehensive 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?
Three sentences with no waste. The first sentence states purpose, the second defines key terms, and the third provides critical user-facing instructions. Information is front-loaded and each sentence 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?
Despite no output schema, the description mentions dashboard_url per detection, which is helpful. However, it does not describe the full return structure, typical fields, pagination, or ordering. For a list tool with 4 parameters and no output schema, a 3 reflects adequate but not complete guidance 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?
All 4 parameters have schema descriptions (100% coverage). The tool description adds value by explaining the customer fallback behavior, default status filter, and that orgScope uses an owner-scoped endpoint. This enriches the schema beyond simple type/enum definitions.
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 'List anomalous outbound network-call detections' with a precise definition of 'anomalous' (not in Harden-Runner baseline). It distinguishes from sibling tools like list_detections, list_blocked_domain_calls, and list_suspicious_process_events by focusing specifically on anomalous network calls.
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 notes that this is 'typically the most-used detection type during an investigation,' implying primary usage. It also provides explicit instructions to include clickable dashboard_url links per detection. However, it does not explicitly compare to alternatives 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.
list_blocked_domain_callsA
List detections where Harden-Runner actively BLOCKED an outbound network call (egress-policy enforcement). Different from anomalous calls: blocked = the call was prevented; anomalous = the call happened but wasn't in baseline. Every result has a dashboard_url — when you present detections to the user you MUST include a clickable link per detection, not just the first one.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — if omitted, falls back to STEP_SECURITY_CUSTOMER env var. Returns detections aggregated across ALL GitHub orgs installed under this tenant. | |
| status | No | Detection status filter. Defaults to 'new'. | |
| limit | No | Max detections to return (1-200). Defaults to 50. | |
| orgScope | No | Optional: restrict to a single GitHub org under this tenant (uses the owner-scoped endpoint instead of tenant-wide). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It reveals that the tool returns only blocked detections and mandates clickable link presentation. However, it does not disclose auth requirements, rate limits, error behavior, or the fact that results can be empty, leaving some behavioral 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?
Two sentences with no unnecessary words. The first sentence conveys purpose and differentiation; the second provides critical output guidance. Every sentence is essential and 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?
For a list tool with four well-described parameters and no output schema, the description adequately covers purpose, differentiation, and output presentation. It lacks details on error handling, sorting, and whether results are paginated, but these are reasonable omissions given the schema covers limit and status.
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 100% description coverage, so the baseline is 3. The description adds minimal semantic value beyond the schema: it mentions the env var fallback for customer and the owner-scoped endpoint for orgScope, but these are inferred from schema. No new semantic context is provided for status or limit.
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 blocked outbound network calls due to egress-policy enforcement, and explicitly distinguishes it from anomalous calls. This differentiates it from its sibling 'list_anomalous_network_calls', providing high specificity.
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 this tool versus list_anomalous_network_calls by contrasting blocked vs anomalous. It also notes the requirement to present dashboard_url as clickable links, but does not provide explicit guidance on when not to use this tool or other alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_detectionsA
List Harden-Runner detections for an organization, filtered by detection type and status. Common detection IDs: 'Action-Uses-Imposter-Commit', 'Suspicious-Process-Events' (aggregates Runner-Worker-Memory-Read + Reverse-Shell + Privileged-Container), 'Anomalous-Outbound-Network-Call', 'Source-Code-Overwritten', 'Secret-In-Build-Log', 'Harden-Runner-Config-Changed', 'NPM-Package-Upgrade-To-Suspicious-Version', 'Agent-Tampered'.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| detectionId | Yes | Detection type (see description for common values) — required by the API | |
| status | No | Detection status filter. Defaults to 'new'. | |
| tenantWide | No | Query customer/tenant scope instead of owner scope (default: owner) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations; description only says 'List' (implying read-only) but omits details on pagination, rate limits, permissions, or response behavior. More context is needed for a read 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 efficient sentences: first states purpose and filter criteria, second provides a concrete list of detection IDs. 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?
Covers purpose and parameter hints well, but lacks context on default status, tenantWide scope, response structure, and behavioral details like pagination. Reasonable for a list tool 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?
With 100% schema coverage, baseline is 3, but the description adds value by listing common detection IDs, enhancing understanding beyond the schema's generic description.
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 Harden-Runner detections with filtering, and the provided common detection IDs help distinguish from more specific sibling tools like list_imposter_commit_detections.
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 general detection listing via common IDs, but lacks explicit guidance on when to use this vs. specific sibling tools like list_imposter_commit_detections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_github_api_calls_in_runA
List every HTTPS call to github.com or api.github.com made by jobs in a specific workflow run. Useful for auditing which GitHub API endpoints a workflow touches — detecting writes to unexpected repos, surprising org access, or API calls from third-party Actions. Fast: one upstream API call. Requires a run_id — if the user doesn't supply one, call list_recent_workflow_runs first to find it. Returns calls grouped by job with step/tool attribution. The response has a top-level dashboard_url for the run AND a per-job dashboard_url deep-linking to the network-events tab scoped to that job. When presenting results, include the per-job link next to each job header.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| repo | Yes | Repository name (without owner) | |
| runId | Yes | Workflow run ID |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations provided, the description fully discloses behavior: fast (one upstream call), returns calls grouped by job with step/tool attribution, includes top-level and per-job dashboard_url links. 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 concise (2-3 sentences) and well-structured, with clear sections for purpose, usage, and response details. 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 no output schema, the description explains the response structure (grouped by job, dashboard links) and provides actionable tips (include per-job link). Given the complexity, this is fully complete for an agent to use 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?
Input schema has 100% coverage with descriptions for all three parameters. The description adds value by explaining the importance of run_id and suggesting a fallback workflow, but schema already provides the core semantics.
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 HTTPS calls to github.com or api.github.com from a specific workflow run, which distinguishes it from sibling tools that handle anomaly detection or general network calls.
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 usage scenarios: auditing API endpoint usage, detecting unexpected writes. Also gives a prerequisite: if missing run_id, call list_recent_workflow_runs first. This guides the agent on when and how to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_https_outbound_callsA
List HTTPS outbound network-call detections (TLS-intercepted calls with method + path). Useful when you need to see WHAT an outbound call did — e.g. POSTs to a suspicious endpoint during a build. Every result has a dashboard_url — when you present detections to the user you MUST include a clickable link per detection, not just the first one.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — if omitted, falls back to STEP_SECURITY_CUSTOMER env var. Returns detections aggregated across ALL GitHub orgs installed under this tenant. | |
| status | No | Detection status filter. Defaults to 'new'. | |
| limit | No | Max detections to return (1-200). Defaults to 50. | |
| orgScope | No | Optional: restrict to a single GitHub org under this tenant (uses the owner-scoped endpoint instead of tenant-wide). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so description carries full burden. It discloses that results have a dashboard_url and mandates clickable links per detection. It also explains the customer parameter fallback to env var and aggregation across all orgs. No contradiction observed.
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 purpose and usage context. Each sentence adds value, though the dashboard_url instruction could be embedded more succinctly. No unnecessary repetition.
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?
No output schema exists, so description must cover return values. It mentions dashboard_url but not other fields like method, path, or timestamp. Gaps in expected output structure reduce completeness 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?
Input schema has 100% coverage, so baseline is 3. Description adds context for 'customer' (fallback and aggregation) and 'orgScope' (owner-scoped endpoint), but these are already in schema descriptions. No new parameter meaning added 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?
Description clearly states 'List HTTPS outbound network-call detections (TLS-intercepted calls with method + path)' which is a specific verb+resource. It distinguishes from siblings like list_anomalous_network_calls by focusing on intercepted outbound calls with method and path details.
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 a concrete use case: 'when you need to see WHAT an outbound call did — e.g. POSTs to a suspicious endpoint during a build'. This helps contextualize when to use this tool, but does not explicitly exclude alternatives or mention when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_imposter_commit_detectionsA
List detections where a GitHub Action is pinned to a commit SHA that doesn't match any legitimate tag or branch head of that action's repo — a strong indicator of Action-tampering (e.g. a compromised tag pointing to malicious commit). Every result has a dashboard_url — when you present detections to the user you MUST include a clickable link per detection, not just the first one.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — if omitted, falls back to STEP_SECURITY_CUSTOMER env var. Returns detections aggregated across ALL GitHub orgs installed under this tenant. | |
| status | No | Detection status filter. Defaults to 'new'. | |
| limit | No | Max detections to return (1-200). Defaults to 50. | |
| orgScope | No | Optional: restrict to a single GitHub org under this tenant (uses the owner-scoped endpoint instead of tenant-wide). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It describes the purpose and output feature (dashboard_url) but does not disclose any side effects, rate limits, or authentication requirements. For a read-only list tool this is adequate but not exceptional.
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 defines purpose, second gives critical usage instruction. No unnecessary words; 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 output schema, the description explains that each result has a dashboard_url and that they are detections of a specific security issue. It could mention additional fields or structure, but it is sufficient for an agent to understand the tool's output.
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, so the schema already documents each parameter well. The description adds the dashboard_url usage note but does not enhance parameter understanding 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 it lists detections of a specific type (imposter commit SHA) and ties it to a security concern (Action-tampering). It is distinct from siblings like list_detections or search_action_usage by focusing on a precise indicator.
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 instruction for presenting results: must include a clickable link per detection, not just the first. However, lacks guidance on when to use this tool vs. alternatives like list_detections or check_ioc_in_baseline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_recent_workflow_runsA
List the 100 most recent Harden-Runner-monitored workflow runs for a GitHub organization, optionally narrowed to one repository. Use this to discover run IDs when the user asks about a run without giving an explicit ID — e.g. 'the latest run of trivy-scan in poc-1'. Every result has a dashboard_url — when you present runs to the user you MUST include a clickable link per run, not just the first one.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| repo | No | Repository name (without owner). Omit for org-wide runs. | |
| page | No | Page number (default 1) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the limit of 100 results, optional repository narrowing, and instructs to include clickable dashboard_url links per run. Missing details on authentication or rate limits, but the given behavioral details are valuable.
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 purpose, followed by usage guidance and a critical output instruction (clickable links). No filler words; every sentence 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 no output schema, the description provides essential context: result limit, optional filtering, and the presence of dashboard_url with a usage rule. Lacks detail on other output fields or pagination behavior, but sufficient for common use cases.
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 clarifying that omitting 'repo' gives org-wide runs and explains the 'page' default (implied). This extra context justifies a score of 4.
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', the resource 'workflow runs', and the scope '100 most recent Harden-Runner-monitored' for a GitHub organization. It distinguishes from sibling tools, which are largely security-specific list tools, by focusing on workflow runs.
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 when-to-use guidance: 'Use this to discover run IDs when the user asks about a run without giving an explicit ID' with a concrete example. Lacks mention of when not to use it (e.g., if more than 100 runs needed or specific filtering), but the guidance is clear and helpful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_secrets_in_build_logA
List detections where a secret (API key, private key, token, etc.) was detected in a CI build log. The API returns the secret already masked (e.g. '----****') — safe to display. Includes rule_id (which detector fired), line_number and step_number for navigation to the leak. Every result has a dashboard_url — when you present detections to the user you MUST include a clickable link per detection, not just the first one.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — if omitted, falls back to STEP_SECURITY_CUSTOMER env var. Returns detections aggregated across ALL GitHub orgs installed under this tenant. | |
| status | No | Detection status filter. Defaults to 'new'. | |
| limit | No | Max detections to return (1-200). Defaults to 50. | |
| orgScope | No | Optional: restrict to a single GitHub org under this tenant (uses the owner-scoped endpoint instead of tenant-wide). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses that the API returns masked secrets (safe to display) and includes specific fields (rule_id, line_number, step_number, dashboard_url). With no annotations, this provides essential behavioral insight, though it could mention pagination or read-only nature.
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 primary purpose and followed by key behavioral and usage details. Every sentence adds value 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?
Covers purpose, response structure, and a mandatory linking instruction. Lacks details on pagination or sorting, but for a list tool with good parameter descriptions, it is sufficiently 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%, and descriptions already explain parameters well. The description adds value by detailing what the response contains, helping the agent understand the output and use parameters effectively.
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 detections of secrets in CI build logs, specifying secret types and response fields. This distinguishes it from sibling tools like list_detections or list_imposter_commit_detections by focusing on build log 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?
Provides some usage context (secrets in CI build logs) and a mandatory linking instruction, but lacks explicit guidance on when to use this versus alternatives like list_detections, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_suppression_rulesA
List all suppression (detection) rules configured for the tenant. Use this before creating a new rule to check for duplicates or near-overlaps. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description labels the tool as 'Read-only,' which is important but minimal. No annotations exist, so the description carries full burden; additional behavioral traits like rate limits or authentication needs are not 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?
Three sentences, front-loaded with key information, no unnecessary words. 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 a simple list tool with no output schema, the description covers purpose, usage, and read-only nature. Could mention response format, but not essential.
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% for the single optional parameter, and the description does not add further semantic value 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?
Description clearly states the verb 'list' and resource 'suppression (detection) rules' with tenant scope. This distinguishes it from sibling tools like create_suppression_rule or delete_suppression_rule.
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 advises using the tool before creating a new rule to check for duplicates or near-overlaps, providing clear context. However, it does not mention when not to use or suggest alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_suspicious_process_eventsA
List suspicious-process-event detections across the tenant. This is a virtual detection ID that aggregates three real types: Runner-Worker-Memory-Read (credential theft from runner memory), Reverse-Shell, and Privileged-Container. Use for runtime-evidence of compromise during an incident. Every result has a dashboard_url — when you present detections to the user you MUST include a clickable link per detection, not just the first one.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — if omitted, falls back to STEP_SECURITY_CUSTOMER env var. Returns detections aggregated across ALL GitHub orgs installed under this tenant. | |
| status | No | Detection status filter. Defaults to 'new'. | |
| limit | No | Max detections to return (1-200). Defaults to 50. | |
| orgScope | No | Optional: restrict to a single GitHub org under this tenant (uses the owner-scoped endpoint instead of tenant-wide). |
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 it's a virtual detection ID aggregating three types and that results have a dashboard_url. Lacks explicit statement on read-only nature or mutability. Adequate but not rich.
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 purpose and additional detail. Efficient, but the second sentence could be split for clarity. Every sentence 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 no output schema, description explains dashboard_url but not other return fields. Parameter descriptions are thorough. Usage guidance is clear. Some room for improvement in specifying return structure.
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 has 100% coverage with descriptions for all 4 parameters. Description adds extra meaning: explains the virtual detection ID aggregation and instructs to present clickable links per detection, adding 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?
Describes a specific verb (list) and resource (suspicious-process-event detections), explains it's a virtual detection ID aggregating three real types, and distinguishes from siblings like list_detections and list_imposter_commit_detections.
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 explicit usage context: 'Use for runtime-evidence of compromise during an incident.' However, does not explicitly mention when not to use this tool versus alternatives (e.g., list_detections), but provides clear context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tenant_github_orgsA
List every GitHub organization installed under a StepSecurity tenant. Call this first when a user asks for a tenant-wide view (e.g. 'find repos across my tenant using bun.sh') — then fan out find_repos_using_endpoint or similar per-org tools across the result. Each org has a dashboard_url pointing to its security summary — surface it as a clickable link per org. customer is optional; falls back to STEP_SECURITY_CUSTOMER.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It implies read-only behavior by listing data, and explains parameter fallback. Could mention rate limits or data freshness, but overall clear about non-destructive nature.
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?
Four sentences, each serving a purpose: purpose, usage guidance, result feature (dashboard_url), and parameter explanation. 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 list tool with one optional parameter and no output schema, the description fully covers purpose, usage sequence, and result handling. 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 coverage is 100% and the description repeats the same information about the 'customer' parameter being optional with fallback to env var. No additional meaning 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 states 'List every GitHub organization installed under a StepSecurity tenant,' which is a specific verb and resource. It clearly distinguishes from sibling tools that focus on processes, detections, or endpoints.
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 tells when to use the tool ('Call this first when a user asks for a tenant-wide view') and directs to subsequent tools like 'find_repos_using_endpoint' for per-org operations. Provides actionable advice about the dashboard_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_threat_incidentsA
List supply-chain threat-center incidents tracked by StepSecurity for a GitHub organization. ALWAYS call this first when the user mentions a known supply-chain incident or malicious package by name (e.g. 'axios compromise', 'trivy incident', 'Shai-Hulud') to find the matching incident and its ID before searching for exposure. Returns a compact summary (no markdown body) — then call get_threat_incident with the ID for full details.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization (e.g. 'actions-security-demo') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the return format is a 'compact summary (no markdown body)' and implies a read-only operation by advising to get full details via another tool. Could be improved by explicitly stating it is non-destructive, but the context strongly suggests a safe query.
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 dense sentences with no wasted words. Front-loaded with purpose, followed by usage directive, then return format and next step. Every sentence serves a distinct function.
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 single required parameter, no output schema, and the context of sibling tools, the description fully covers what the tool does, when to use it, what it returns, and how to proceed. No obvious 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% (1 param described). The description's mention of 'for a GitHub organization' merely paraphrases the schema's description. No additional parameter semantics beyond what the schema already provides, so 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?
Clearly states the verb 'List' and the resource 'supply-chain threat-center incidents' scoped to a GitHub organization. Differentiates from sibling tools like get_threat_incident by positioning it as the initial lookup step.
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 when-to-use guidance: 'ALWAYS call this first when the user mentions a known supply-chain incident...' with concrete examples (e.g., 'axios compromise'). Also instructs to call get_threat_incident afterward. No ambiguity about context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pingA
Returns 'pong' — use to verify the MCP server is reachable.
| Name | Required | Description | Default |
|---|---|---|---|
| message | No | Optional echo payload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description correctly discloses the tool returns 'pong'. For a simple ping, this is sufficient behavioral transparency with 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?
A single sentence that is concise and front-loaded with the key behavior ('Returns pong') followed by usage context. 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 low complexity, high schema coverage, and absence of an output schema, the description fully covers what the agent needs: return value and use case.
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 description adds no additional meaning beyond what the schema already provides ('Optional echo payload'). 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 returns 'pong' and its purpose is to verify server reachability, which is distinct from all sibling tools that involve security analysis.
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 says to use it 'to verify the MCP server is reachable', providing clear context. While no exclusions or alternatives are given, none are needed for a simple health check.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_suppression_ruleA
APPROXIMATE client-side preview of what creating a suppression rule would do. Fetches recent detections of the given detection_id and filters them against the proposed conditions, returning the count and up to 20 samples (with dashboard_url per sample). Use this BEFORE create_suppression_rule to show the user concrete impact. Preview uses exact + wildcard matching — the server's matcher is stricter (CIDR for ip_address, regex), so the final count after create may differ slightly.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| detectionId | Yes | Detection type the rule targets, e.g. 'New-Outbound-Network-Call', 'Secret-In-Build-Log', 'Action-Uses-Imposter-Commit' | |
| conditions | Yes | Match conditions. Keys: owner, repo, workflow, job (omit or '*' for wildcard), plus type-specific keys like endpoint, ip_address, process, host, file, file_path, secret_type, action. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses it is approximate, client-side, and explains matching logic differences (exact/wildcard vs CIDR/regex). No annotations provided, so description fully carries the behavioral transparency burden.
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?
Concise, front-loaded with core purpose, each sentence adds value: preview action, output description, usage timing, and matching approximation note.
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?
Describes output (count and up to 20 samples with dashboard_url) despite no output schema. Covers approximation and matching differences. Complete for a preview 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%, but description adds context by explaining detectionId as detection type and conditions as match keys with examples. Provides meaning beyond schema alone.
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 it is a client-side preview of suppression rule impact, fetches recent detections, filters conditions, returns count and samples. Distinguishes from create_suppression_rule by advising use before creation.
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 states to use this tool before create_suppression_rule to show concrete impact. Also warns that preview matching is approximate and server matching may differ, guiding proper usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_action_usageA
Find which workflows across the organization use a given GitHub Action. Useful for responding to a compromised Action (e.g. 'which repos use aquasecurity/setup-trivy?'). Returns one entry per workflow that references the Action.
| Name | Required | Description | Default |
|---|---|---|---|
| owner | Yes | GitHub organization | |
| action | Yes | Action reference in 'owner/repo' form (no tag/sha), e.g. 'aquasecurity/trivy-action' |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It explains the output (one entry per workflow) but does not disclose behavioral traits like authorization requirements, rate limits, or handling of missing actions. It adds some value beyond the schema but lacks depth.
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 fluff. Directly states purpose, gives an example, and specifies output format. Every sentence 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 simplicity (2 string params, no output schema), the description is nearly complete. It mentions the return format and a use case. Missing details like error handling or pagination, but overall sufficient for the 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 coverage is 100% with descriptions for both parameters. The description reinforces that 'action' should be in 'owner/repo' form without tag/sha, but adds no significant new meaning beyond the schema. 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?
The description clearly states the tool's purpose: 'Find which workflows across the organization use a given GitHub Action.' It provides a concrete example ('which repos use aquasecurity/setup-trivy?') and specifies the output format, distinguishing it from sibling 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 usage context with the example 'responding to a compromised Action,' but does not explicitly state when to use or avoid this tool compared to siblings. No alternatives or exclusion criteria are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_suppression_ruleA
Update an existing suppression rule (name, description, or conditions). WRITE OPERATION — requires confirm: true.
| Name | Required | Description | Default |
|---|---|---|---|
| customer | No | StepSecurity customer/tenant identifier. Optional — falls back to STEP_SECURITY_CUSTOMER env var. | |
| ruleId | Yes | Rule id to update | |
| name | No | ||
| description | No | ||
| conditions | No | ||
| confirm | Yes | Set to true to actually execute the write. Any other value (including omitted) returns an error — this is a safety check so the LLM cannot write without explicit user approval. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description highlights write operation and safety check, but lacks details on error behavior, idempotency, or permission requirements for a mutation 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?
Single, clear sentence that immediately conveys purpose and critical requirement (confirm). Front-loaded and 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?
Lacks details on conditions object format, error handling, return value, and prerequisites. Given no output schema and complexity, the description is incomplete 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 coverage is 50%; description adds minimal value beyond schema. It lists fields but does not explain conditions structure or provide extra semantics for undocumented parameters.
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 'update' and resource 'suppression rule', and lists updatable fields (name, description, conditions). Distinguishes from siblings like create and delete.
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 that it requires 'confirm: true' and is a WRITE OPERATION, implying user approval needed. No explicit when-not-to-use or alternative tools mentioned, but context is adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
30 tool updates
v0.1.1- First observed
analyze_anomalous_calls_by_process - First observed
check_ioc_in_baseline - First observed
check_npm_package_exposure - First observed
check_npm_package_on_dev_machines - First observed
check_pypi_package_exposure - First observed
check_python_package_on_dev_machines - First observed
create_suppression_rule - First observed
delete_suppression_rule - First observed
describe_capabilities - First observed
find_endpoint_calls_in_tenant - First observed
find_repos_using_endpoint - First observed
get_my_tenant - First observed
get_suppression_rule - First observed
get_threat_incident - First observed
list_anomalous_network_calls - First observed
list_blocked_domain_calls - First observed
list_detections - First observed
list_github_api_calls_in_run - First observed
list_https_outbound_calls - First observed
list_imposter_commit_detections - First observed
list_recent_workflow_runs - First observed
list_secrets_in_build_log - First observed
list_suppression_rules - First observed
list_suspicious_process_events - First observed
list_tenant_github_orgs - First observed
list_threat_incidents - First observed
ping - First observed
preview_suppression_rule - First observed
search_action_usage - First observed
update_suppression_rule
TDQS
Tools are generally distinct but the many detection listing tools (e.g., list_anomalous_network_calls, list_blocked_domain_calls, list_https_outbound_calls, list_suspicious_process_events) could cause confusion despite descriptive names. Overlap is minimal due to specific filters.
All tool names follow a consistent verb_noun snake_case pattern (e.g., list_anomalous_network_calls, create_suppression_rule). No mixing of conventions or abbreviations, making the pattern predictable.
30 tools is high but justified for a security monitoring server covering incident response, suppression rules, detection listing, and package exposure. The scope is broad, but each tool has a clear purpose and the count is not excessive given the domain.
The tool surface covers detection management, threat incident analysis, package exposure (CI and dev machines), and suppression rules. Minor gaps exist, such as a generic 'list all detections' tool or user management, but core workflows are well-covered.
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
Security scanner for MCP servers. Detect vulnerabilities, prompt injection, and tool poisoning.
- ArcjetOAuthcom.arcjet
An MCP server for Arcjet - the runtime security platform that ships with your AI code.
MCP server for Appcircle mobile CI/CD platform.
MCP server for secureFlows: token-free URL builders and integration-linting tools for AI agents.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for Cursor that scans codebases for security issues including hardcoded secrets, SAST, vulnerable dependencies, and IaC misconfigurations.7MIT
- AlicenseCqualityCmaintenanceMCP server for ArmorCode security platform enabling finding triage, scans, exceptions, risk scores, and release gate checks via natural language.3716MIT
- AlicenseNot gradedqualityBmaintenanceStandalone MCP server that provides security scanning, project mapping, and vulnerability fix generation to AI coding assistants.7912MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for Legit Security that answers questions about security issues, Actions, inventory, posture, and platform usage across one or multiple tenants.-
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/step-security/stepsecurity-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server