A Deno-based MCP (Model Context Protocol) service that helps you securely reference GitHub Actions by providing:
- Latest version lookup for any GitHub Action
- Commit SHA retrieval for specific version tags
- Immutability status checking for releases
- Ready-to-use SHA-pinned references
- Workflow analysis with update level detection (major/minor/patch)
- Safe update suggestions that avoid breaking changes
- Documentation retrieval for actions at specific versions
- Version comparison to identify changes and breaking updates between releases
GitHub Actions referenced by tag (e.g., actions/checkout@v4) can be vulnerable
to supply chain attacks if the tag is moved to point to malicious code. This MCP
service helps you:
- Find the commit SHA for any action version
- Check if a release is immutable (protected from modification)
- Get secure references in the format
owner/repo@sha # version
- Deno 2.x or later
Add to your Claude Desktop configuration (claude_desktop_config.json):
{
"mcpServers": {
"github-actions": {
"command": "deno",
"args": [
"run",
"--allow-net",
"--allow-env",
"--allow-run=gh",
"/path/to/mcp-github-actions/main.ts"
],
"env": {
"GITHUB_TOKEN": "your-github-token-optional"
}
}
}
}
claude mcp add github-actions -- deno run --allow-net --allow-env --allow-run=gh /path/to/mcp-github-actions/main.ts
The service is available as a Docker image using stdio transport.
Pull the image:
docker pull ghcr.io/tripletex/mcp-github-action:latest
Run directly:
docker run --rm -i -e GITHUB_TOKEN ghcr.io/tripletex/mcp-github-action:latest
Claude Desktop configuration:
{
"mcpServers": {
"github-actions": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"GITHUB_TOKEN",
"ghcr.io/tripletex/mcp-github-action:latest"
],
"env": {
"GITHUB_TOKEN": "your-github-token-optional"
}
}
}
}
Once configured, ask Claude to look up GitHub Actions:
Example prompts:
- "Look up the latest version of actions/checkout"
- "Get the secure reference for actions/setup-node@v4"
- "Check if actions/cache@v4.2.0 is immutable"
- "List all versions of actions/upload-artifact"
- "Analyze my workflow file for outdated actions"
- "Suggest safe updates for my CI workflow"
- "What's the latest v4.x version of actions/checkout?"
- "Show me the documentation for actions/checkout@v4"
- "Compare changes between actions/setup-node@v4.0.0 and v6.0.0"
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | Yes | Action reference (e.g., actions/checkout or actions/checkout@v4) |
include_all_versions |
boolean | No | List all available versions (default: false) |
Action: actions/checkout
Latest Version: v6.0.1
Commit SHA: 8e8c483db84b4bee98b60c0593521ed34d9990e8
Immutable: No
Published: 2025-12-02T16:38:59Z
Recommended Usage (SHA-pinned):
uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
Security Notes:
- WARNING: This release is NOT immutable. The tag could potentially be moved to a different commit.
- Using the SHA-pinned reference provides protection against tag tampering.
- SHA-pinned references prevent supply chain attacks by ensuring you always use the exact same code.
Analyze a GitHub Actions workflow file and show version status for all actions. Reports current vs latest versions, update levels (major/minor/patch), and risk assessment.
| Parameter | Type | Required | Description |
|---|---|---|---|
workflow_content |
string | Yes | The workflow YAML content to analyze |
only_updates |
boolean | No | Only show actions that need updates (default: false) |
## Summary
Total actions: 6
Up to date: 1
Major updates available: 2 β οΈ
Minor updates available: 2
Patch updates available: 1
## Actions
| Action | Current | Latest | Update | Risk |
|--------|---------|--------|--------|------|
| actions/checkout | v4.2.2 | v6.0.1 | β οΈ Major | π΄ High |
| actions/setup-node | v4.1.0 | v6.2.0 | β οΈ Major | π΄ High |
| docker/login-action | v3.3.0 | v3.6.0 | π¦ Minor | π‘ Medium |
| docker/build-push-action | v6.9.0 | v6.18.0 | π¦ Minor | π‘ Medium |
| appleboy/ssh-action | v1.2.0 | v1.2.4 | π§ Patch | π’ Low |
## Safe Updates (Minor/Patch)
...
## Major Updates (Review Required)
...
Suggest safe updates for GitHub Actions in a workflow. Returns only safe updates (minor/patch) and suggestions to stay current within major versions.
| Parameter | Type | Required | Description |
|---|---|---|---|
workflow_content |
string | Yes | The workflow YAML content to analyze |
risk_tolerance |
string | No | "patch" = only patches, "minor" = patch + minor (default), "all" = all |
## Summary
Total actions analyzed: 6
Already up to date: 1
Safe updates available: 3
Actions with major updates: 2 (staying on current major)
## Safe Updates
These updates are safe to apply:
### π¦ docker/login-action: v3.3.0 β v3.6.0
Minor version update - new features, backwards compatible
uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.6.0
### π§ appleboy/ssh-action: v1.2.0 β v1.2.4
Patch version update - bug fixes only
uses: appleboy/ssh-action@2ead5e36573714d0d3cfcbac3646c3e0f09ec849 # v1.2.4
## Updates Within Current Major
These actions have major updates available, but you can safely update within your current major version:
### actions/checkout: v4.2.2 β v4.2.2
Safe update within v4.x (latest overall is v6.0.1)
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
Get the latest version of a GitHub Action within the same major version. Useful for safe updates that avoid breaking changes.
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | Yes | Action reference with version (e.g., actions/checkout@v4 or @v4.1.0) |
Action: actions/checkout
Current Version: v4
Major Version: v4
Latest in v4.x: v4.2.2
Commit SHA: 11bd71901bbe5b1630ceea73d27597364c9af683
Immutable: Yes
Note: Latest overall is v6.0.1
Recommended Usage (SHA-pinned):
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
Get README documentation for a GitHub Action at a specific version. Useful for understanding how to use an action at a particular release.
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | Yes | Action reference (e.g., actions/checkout or actions/checkout@v4) |
ref |
string | No | Optional ref override (tag/branch/commit). Defaults to version or main branch |
# actions/checkout Documentation
Ref: v4.2.0
---
[Full README markdown content for the action at the specified version]
Compare changes between two versions of a GitHub Action. Shows release notes and identifies version update levels to help with upgrade decisions.
| Parameter | Type | Required | Description |
|---|---|---|---|
action |
string | Yes | Action with current version (e.g., actions/checkout@v4.0.2) |
target_version |
string | No | Target version (defaults to latest) |
# Version Comparison: actions/checkout
From: v4.0.0
To: v4.2.0
## Summary
- Total releases: 3
- Major updates: 0
- Minor updates: 2
- Patch updates: 1
## Release History (chronological)
### v4.1.0 (2025-02-15) - Minor Update
Added support for sparse checkouts and improved performance.
### v4.1.1 (2025-02-20) - Patch Update
Fixed bug with submodule handling on Windows.
### v4.2.0 (2025-03-01) - Minor Update
Added new input parameter for custom checkout paths.
---
Note: Major version updates (marked with β οΈ) may contain breaking changes.
Review the release notes above to understand the impact of each update.
The service supports multiple authentication methods, checked in the following order:
- Org-specific tokens (
GITHUB_TOKEN_<ORG>) - For multi-org scenarios - Environment variable (
GITHUB_TOKEN) - Explicit token configuration - GitHub CLI (
gh auth token) - Automatic token from logged-inghCLI - Unauthenticated - Public repositories only with rate limits
- Works for public repositories only
- Rate limit: 60 requests/hour
- No setup required
If you have the GitHub CLI installed and authenticated:
gh auth login
The service will automatically use your gh CLI token when no explicit token is
configured. This is convenient for local development and doesn't require
managing separate tokens.
Permissions note: The service needs --allow-run=gh permission to execute
the gh command.
Set the GITHUB_TOKEN environment variable:
- Works for private repositories
- Rate limit: 5,000 requests/hour
- Required for organization private actions
- Recommended for production deployments
For accessing private repositories across multiple organizations, configure org-specific tokens:
# Org-specific tokens (format: GITHUB_TOKEN_<ORG_NAME>)
# Hyphens in org names become underscores, all uppercase
GITHUB_TOKEN_MY_ORG=ghp_xxx... # For My-Org
GITHUB_TOKEN_OTHER_ORG=ghp_yyy... # For Other-Org
GITHUB_TOKEN=ghp_zzz... # Fallback for public repos
Token resolution order:
- Org-specific token (
GITHUB_TOKEN_<ORG>) - Fallback token (
GITHUB_TOKEN) - GitHub CLI token (
gh auth token) - Unauthenticated (public repos only)
Supported token types and required permissions:
| Token Type | Required Permissions | Notes |
|---|---|---|
| Fine-grained PAT | Contents: Read + Metadata: Read |
Recommended - scoped to specific repos/orgs |
| Classic PAT | repo scope |
Broader access - use only if fine-grained isn't suitable |
| GitHub App | Contents: Read |
Recommended for organizations |
Note: For private repositories, the token must have read access to repository contents. Without proper permissions, you'll receive a 404 error when looking up private actions.
Example Claude Desktop config with multi-org:
{
"mcpServers": {
"github-actions": {
"command": "deno",
"args": [
"run",
"--allow-net",
"--allow-env",
"--allow-run=gh",
"/path/to/mcp-github-actions/main.ts"
],
"env": {
"GITHUB_TOKEN_MY_ORG": "ghs_xxx...",
"GITHUB_TOKEN_OTHER_ORG": "ghs_yyy...",
"GITHUB_TOKEN": "ghp_zzz..."
}
}
}
}
To avoid using releases that are too new (which may contain undiscovered bugs or be part of a supply chain attack), you can configure a minimum age requirement:
# Skip releases published within the last 5 days
MIN_RELEASE_AGE_DAYS=5
When set, the service will:
- Skip the absolute latest release if it's newer than the threshold
- Return the most recent release that meets the age requirement
- Display the release age in the output
- Add a note in security notes when filtering is active
Example with minimum age:
Action: actions/checkout
Latest Version: v6.0.1
Commit SHA: 8e8c483db84b4bee98b60c0593521ed34d9990e8
Immutable: No
Published: 2025-12-02T16:38:59Z (52 days ago)
Security Notes:
- Minimum release age filter active: only considering releases at least 5 days old.
If no release meets the age requirement, an error will be returned indicating the latest release's age.
Claude Desktop config with minimum age:
{
"mcpServers": {
"github-actions": {
"command": "deno",
"args": [
"run",
"--allow-net",
"--allow-env",
"--allow-run=gh",
"/path/to/mcp-github-actions/main.ts"
],
"env": {
"GITHUB_TOKEN": "ghp_xxx...",
"MIN_RELEASE_AGE_DAYS": "5"
}
}
}
}
# Run the server
deno task start
# Run with watch mode (auto-reload)
deno task dev
# Type check
deno task check
# Lint
deno task lint
# Format
deno task fmt
# Compile to binary
deno task compile
- Always use SHA-pinned references in production workflows
- Check immutability status - immutable releases cannot be modified
- Add version comments for maintainability:
@sha # v4.2.0 - Use Dependabot/Renovate to keep SHA references updated
MIT