GitHub Actions Audit

io.github.UnbearableDevPublished by GitHub account UnbearableDevv1.0.1Updated Nov 2, 2026

GitHub Actions workflow security audit - 21 checks: pinning, permissions, secrets, injection.

The publisher's own server: audit.domains - Domain Valuation

VerifiedStreamable HTTPWeb executableDeveloper ToolsSecurity & Monitoring

Overview

AI-generated overview

Audits GitHub Actions workflow YAML for supply-chain and secret-handling risks, returning severity-ranked findings with fixes.

What you can do
  • Run all 21 checks on a pasted workflow YAML or an HTTPS URL to a workflow file
  • Check secrets, GITHUB_TOKEN permissions, action version pinning, runner security and workflow config hygiene
  • Detect advanced supply-chain patterns such as pull_request_target misuse and unpinned branch refs
  • Browse the check catalog by category
  • Return severity, affected job and step, description, remediation and a paste-ready YAML fix snippet
When to use it
Useful when reviewing or hardening CI pipelines in a repository, before merging workflow changes, or when triaging a suspected supply-chain risk in GitHub Actions files.
Requirements
Remote streamable HTTP endpoint; no local install. Requires an Apify API token sent in the Authorization header as a bearer token. Network access to the endpoint and to any workflow URL you submit.
Before you install
Usage is pay-per-event: each audit or check call is billed and catalog browsing costs a small fee, so calls spend money on the Apify account. The Apify API token is a credential and should be kept secret. Workflow YAML you submit, or URLs you point it at, are sent to a third-party hosted service.

Installation

In SourceWeft

  1. Open GitHub Actions Audit in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.UnbearableDev%2Fgithub-actions-audit/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "github-actions-audit": {
      "type": "http",
      "url": "https://unbearable-dev--github-actions-audit.apify.actor/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

GitHub Actions Security Audit

MCP server that audits .github/workflows/*.yml files for supply-chain risks. Catches script injection, leaked tokens, unpinned actions, broad permissions, and pull_request_target foot-guns — the patterns behind several 2024–2025 supply-chain incidents.

Built by Unbearable Labs. Pay-per-event — only billed when a tool is actually called.


Available on

  • Apify Actor Store — primary, metered usage (PPE)
  • MCPize — pending submission
  • MCP.so — pending submission
  • PulseMCP — pending submission
  • Smithery — pending submission
  • Glama — pending submission

Newsletter: Unbearable TechTips Weekly · All Actors: github.com/UnbearableDev

What it does

Point any MCP-capable client (Claude Desktop, Cursor, n8n, Make, Zapier, custom agents) at this server, hand it a workflow YAML, and get back structured findings with:

  • Severity — critical / high / medium / low / info
  • Affected job and step — exact location of the problem
  • Description — why it matters, with the actual attack vector
  • Remediation — what to do about it
  • Fix snippet — YAML you can paste directly

Tools

ToolPurpose
audit_workflow(workflow_yaml? | workflow_url?, min_severity='low')Run all checks
check_secrets(...)Secret-leakage paths only
check_permissions(...)GITHUB_TOKEN scope issues only
check_action_pinning(...)Action version-pinning only
check_runner_security(...)Self-hosted runner + script injection
check_workflow_config(...)Timeout / config hygiene
check_supply_chain_advanced(...)TeamPCP-class supply-chain patterns (GHA-201..208)
list_checks(category?)Browse the catalog

Provide exactly one of workflow_yaml (paste the content) or workflow_url (HTTPS URL — typically a GitHub raw URL to a specific workflow file).

Check catalog (v2: 21 checks)

IDCategorySeverityTitle
GHA-001secretshighSecret interpolated directly into run: script
GHA-002secretshighSecret printed via echo / set-output
GHA-003secretsmediumSecret used in if: condition
GHA-004secretshighHardcoded credential pattern in env:
GHA-010permissionshighpermissions: write-all granted
GHA-011permissionsmediumNo top-level permissions: (inherits broad default)
GHA-013permissionshighpull_request_target + checkout PR head = PWNing pattern
GHA-020action_pinninghighThird-party action pinned to mutable tag
GHA-021action_pinninghighThird-party action pinned to mutable branch
GHA-022action_pinningmediumFirst-party action not SHA-pinned
GHA-030runner_securitymediumSelf-hosted runner used on pull_request from forks
GHA-032runner_securityhighScript injection via untrusted github.event.* interpolation
GHA-040workflow_configlowNo timeout-minutes on job
GHA-201supply_chain_advancedhighAction pinned to unpinned branch ref (TeamPCP-class: @main/@master)
GHA-202supply_chain_advancedhighAction pinned to mutable tag — SHA pin recommended
GHA-203supply_chain_advancedcriticalpull_request_target + checkout of PR head SHA/ref (codecov/tj-actions exploitation path)
GHA-204supply_chain_advancedhighScript injection via github.event.* user-controlled field in run:
GHA-205supply_chain_advancedmediumAction from non-allowlisted owner (untrusted 3rd-party)
GHA-206supply_chain_advancedhighTop-level permissions: write-all or contents: write without per-job scoping
GHA-207supply_chain_advancedmediumSecret logged via echo / cat in run: block
GHA-208supply_chain_advancedlowAction uses a known-retired tag

Pricing

EventUSD
Any audit / check_* tool call$0.02
list_checks discovery$0.005

Connecting from Claude Desktop

json
{  "mcpServers": {    "gha-audit": {      "transport": "streamable-http",      "url": "https://YOUR-ACTOR-URL.apify.actor/mcp"    }  }}

Sibling MCPs from Unbearable Labs

What's NOT covered (yet)

  • Reusable workflow auditing (multi-file resolution)
  • CodeQL-grade dataflow tracking
  • Marketplace-listed action reputation scoring

Source / contact

Source: github.com/UnbearableDev/github-actions-audit. Issues + ideas: [email protected].


📬 Built by Noel @ Unbearable Labs. More MCP servers + audit tips in the newsletter: https://unbearabletechtips.beehiiv.com

Source: README.md at commit d95de06

Tools

0
This server asks for a credential such as an API key, so SourceWeft could not read its tools without one and has not indexed them.

Version history

1
  1. v1.0.1LatestSep 16, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.

Other Audit integrations