GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
제작자가 쓴 설명(영어 원문)
GitHub Actions supply-chain hardener: audit workflows for unpinned actions and build a SHA pin plan.
이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.
이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.
쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.
필요한 것
어떤 앱을 쓰세요?
위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.
Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요
{
"mcpServers": {
"actionpin": {
"command": "npx",
"args": [
"-y",
"@reneturcios/actionpin",
"mcp"
]
}
}
}터미널에서 이 명령어를 실행하세요
claude mcp add actionpin -- npx -y @reneturcios/actionpin mcp프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요
{
"mcpServers": {
"actionpin": {
"command": "npx",
"args": [
"-y",
"@reneturcios/actionpin",
"mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
프로젝트의 .vscode/mcp.json에 붙여 넣으세요
{
"servers": {
"actionpin": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@reneturcios/actionpin",
"mcp"
]
}
}
}브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.
이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.
선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.
이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.
내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.
누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 7일 점검
레지스트리 이름이 GitHub 계정 CloudCorpRecords 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
아직 GitHub에서 이 저장소를 읽어 오지 않았어요
내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요
내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요
내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요
레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.
해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.
레지스트리에 필수 키가 나와 있지 않아요. 다만 처음 쓸 때 로그인을 요구하는 서버도 있어요.
내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).
GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.8)은 12일 전 레지스트리에 올라왔어요.
Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js, Docker도 있어야 해요.
같은 카테고리에는: GitHub, Desktop Commander, Cloudflare MCP
같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.
카드 보는 법:★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.
A version tag is a promise anyone can break. A commit SHA is not.
npx @reneturcios/actionpin audit
GitHub Actions are executable supply chain. When a workflow says uses: actions/checkout@v4, that tag can move. When a third-party action tag moves to a compromised commit, every workflow that trusts the tag runs the new code with that workflow's tokens. Pinning to a full 40-character commit SHA is the standard defense, and almost nobody does it consistently, because doing it by hand across every workflow is tedious and easy to get wrong.
actionpin audits every workflow in a repo, reports exactly which actions are pinned and which are not, and can rewrite the unpinned ones to SHAs for you, keeping the original tag as a comment so the pin stays readable.
GitHub Actions are the second largest confirmed open source supply-chain attack surface of the last year, behind only npm. Maintainer accounts and action tags have been hijacked before, and a mutable tag means the code your CI runs today is not guaranteed to be the code you reviewed. The fix is known and boring: pin to a SHA. actionpin makes the boring fix one command, and makes the audit callable by agents through MCP so it can run inside contribution and release workflows, not just by hand.
For every uses: line in .github/workflows/*.yml and *.yaml:
| classification | meaning |
|---|---|
PINNED | Ref is a full 40-character commit SHA (or a full sha256 or sha512 content digest for a container image) |
MUTABLE | Ref is a version tag such as v4 or v4.2.1. The tag can move. |
BRANCH | Ref is a branch such as main, master, or HEAD. It moves by design. |
LOCAL | A local path such as ./local/action. Never rewritten. |
Owner types: official for actions owned by actions or github, third-party for everyone else, docker for docker:// container actions, and local for local paths.
Verdict rules:
Fix mode resolves a tag or branch to its commit SHA through the GitHub API and rewrites the line to owner/repo@ # , preserving indentation and all other content. Files are edited line-wise; YAML is never parsed and re-emitted, so formatting survives. If a ref cannot be resolved, its line is left unchanged and the failure is reported. Docker image refs are reported but not rewritten; pin those by digest.
# Audit the current repo
npx @reneturcios/actionpin audit
npx @reneturcios/actionpin audit ~/src/my-repo --json
npx @reneturcios/actionpin org ~/src/my-org --json
npx @reneturcios/actionpin fix --dry-run
npx @reneturcios/actionpin fix
Example output:
actionpin audit .: EXPOSED
workflows: 2, actions: 6, pinned: 1, mutable: 4, branch: 1, local: 0 [PINNED] .github/workflows/ci.yml:12 actions/checkout@0123456789abcdef0123456789abcdef01234567 (official) [MUTABLE] .github/workflows/ci.yml:13 actions/setup-node@v4 (official) [MUTABLE] .github/workflows/publish.yml:20 docker/build-push-action@v6 (third-party) EXPOSED: at least one third-party or container action uses a mutable tag or branch ref.
Set GITHUB_TOKEN for the higher authenticated GitHub API rate limit during fix mode. Auditing needs no credentials and no network.
Add to your MCP client config:
{
"mcpServers": { "actionpin": { "command": "npx", "args": ["-y", "@reneturcios/actionpin", "mcp"] } } }
Tools:
audit_workflows: audit a repo path and return every action with its classification, owner type, file, and line, plus the verdict.pin_plan: return the full SHA pinning plan for a path without writing any files.docker run -i ghcr.io/cloudcorprecords/actionpin mcp
docker run --rm -v "$PWD:/work" -w /work ghcr.io/cloudcorprecords/actionpin audit .
These behaviors are deliberate, tested, and stated plainly so a green report is never misread:
.github/workflows/*.yml and *.yaml, and also the action definitions that live inside the scanned repo: the root-level action.yml or action.yaml (the scanned repo's own published action definition, scanned whether or not a workflow references it, which is the normal shape for a repo that ships an action), every action.yml and action.yaml under .github/actions/, plus any local action directory a workflow references with a ./ uses path. Their internal steps are inventoried and classified like workflow steps, flagged as composite action refs, and drive the verdict the same way. A root action whose steps reference the repo's own action (via ./ or via its published name) is scanned exactly once; self-reference never recurses or double counts. The report lists how many composite files were scanned, and names any action files found elsewhere in the repo that were not scanned (not the root action file, outside .github/actions, and not referenced by a workflow), so coverage is never implied beyond what was audited. Passing an action.yml file path directly also parses it like any other file. Job-level uses: lines (reusable workflow calls) are in scope and are audited and pinned like step-level ones.$/.github/actions/issues-helper (a stray character where the dot of the ./ prefix belongs, shipped by real repos) names no remote repository, so it is classified LOCAL and is never resolved against the GitHub API in fix mode. The finding carries a note that the prefix is not a valid remote reference and looks like a local path typo, because the spelling is a real defect in the target repo even though it is not a pinning exposure.uses: value that contains a GitHub expression (${{ matrix.action }}, actions/checkout@${{ inputs.ref }}) is decided at run time and cannot be classified statically. actionpin skips it entirely instead of inventing an action or a verdict for it. Audit the matrix or input values themselves if a workflow builds its actions dynamically.docker:// images) is PINNED. A short SHA such as abc1234 is reported in the BRANCH bucket and fails the verdict, because a short prefix is not a stable pin.docker:// images only a full content digest counts. A tag spelled as 40 hex characters is still a tag and can be re-pushed, and a truncated or non-hex digest is not a digest; both are MUTABLE.uses: value is classified by the value itself, an alias line (uses: *name, or a step alias - *name) inherits the anchored classification and is flagged viaAlias, and anchors must be defined before use in the same file, matching GitHub. Fix mode pins the anchor definition line and never rewrites an alias line.release/v1, feature/new-thing) are reported as BRANCH bucket moving refs. Fix mode resolves them through the git-ref API with the slash preserved.uses: entries written in YAML flow style (for example steps: [{uses: 'actions/checkout@v4'}]), including several entries sharing one line, flow collections split across lines, and quoted (JSON-shaped) keys. Commented-out uses: lines are ignored, and a uses: word inside a quoted string or a run command invents no action. Fix mode pins a flow entry without adding a version comment on the shared line, because a comment would eat the rest of that line.uses: key whose value cannot be extracted, the report names the file in unparsedWorkflows, carries a note saying it could not be fully parsed, and floors the verdict at PARTIAL, so the file never silently contributes zero actions to a PINNED verdict.docker:// lines unchanged and says so in the plan..yml or .yaml file; any other regular file (a package.json, a README) is a usage error exit 2, not a workflow. A target that is neither a file nor a directory is a usage error too.actionpin is part of a family of small, single-purpose developer tools by the same author, all built the same way: one bin that serves a CLI and an MCP server, deterministic checks with evidence, no invented answers.
npm install
npm run build npm test
Tests run on fixtures with an injected fetch function; no test touches the network.
#
앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요