python-github-actions-tracker MCP server
2026년 11월 8일 커밋Provides persistent observability for GitHub Actions by allowing AI agents to query CI runs, jobs, logs, and trigger workflows via MCP, REST, or CLI.
다른 이름 rhosocial/python-github-actions-tracker
- 스타
- 0
- Tools
- —
- 다운로드, 30일
- —
- 최신 버전
- —
- 마지막 커밋
- 2026년 11월 8일
- 라이선스
- Apache-2.0
python-github-actions-tracker MCP란?
python-github-actions-tracker은(는) MCP server입니다. Provides persistent observability for GitHub Actions by allowing AI agents to query CI runs, jobs, logs, and trigger workflows via MCP, REST, or CLI.
프로젝트 README에서 생성된 요약
python-github-actions-tracker MCP server 정보
Developers needing persistent observability for GitHub Actions can use this service to query CI runs, jobs, and logs through an AI agent. It functions as a self-hosted tool that captures step-level logs and stores them in a PostgreSQL database, ensuring that even when GitHub merges log files after an hour, the original split data remains accessible. This allows for efficient local searching and filtering without consuming GitHub API quotas for every request.
Users can interact with the service via MCP using Streamable HTTP, a REST API, or a CLI. To connect an AI client like Claude Code or Codex, you provide the local or remote URL and an authorization header using a GHAT_API_KEY. The system provides specific tools such as find_runs, get_job_log, and trigger_workflow to manage CI processes. It also includes features like wait_for_run to handle long-polling and rerun_run to repeat only failed jobs, making it a specialized utility for maintaining CI visibility.
활용 사례
- 1Debug failed CI stepsAn AI agent can retrieve the specific text from a failed job step to identify errors.
- 2Analyze repetitive failuresA developer can group multiple failed jobs that share the exact same error output.
- 3Automate workflow executionYou can instruct an agent to start a new workflow run while avoiding duplicates if the commit has already been processed.
프로젝트의 README를 바탕으로 작성되었습니다. 모든 활용 사례는 해당 내용의 인용문과 대조하여 확인합니다.
README
GitHub에서 보기python-github-actions-tracker
A self-hosted service that answers "what happened in CI" — over MCP, REST and a CLI.
It reads GitHub Actions runs, jobs, steps and logs; it does not poll in the background, does not keep a central token pool, and never treats a cached run as the truth when GitHub can still answer.
English | 简体中文
What you get
| Ask once, in any protocol | ci_status, find_runs, get_run, get_job, get_job_log, search_job_log, get_run_failed_logs, wait_for_run, trigger_workflow — over MCP (Streamable HTTP), REST and a CLI. One flow, three shapes; a model or a script uses the same answers. |
| Three layers, one step each | get_run names the job that failed, get_job names the step, get_job_log returns its text. No call answers two layers, so no caller has to know which one it is looking at. A failed job read without a scope starts at its failed steps; whole_job=true asks for everything. |
| One failure in twelve jobs, one group | get_run_failed_logs groups a run's failed-step texts by byte equality: one copy plus the jobs that printed it. Same cause or twelve? One call, and no judgement about meaning. |
| Step-level logs, kept | GitHub splits a run into per-step files for about an hour; after that the same endpoint returns one merged document. The service captures the split while it exists, stores it as ordinary rows, and reads it forever. Missed capture is reported honestly — never replaced by another step's text. |
| Windows that address, not interpret | tail, an explicit line range, or your own regex. search_job_log shows context for the last matches by default, because a log ends with its conclusion; every position is still reported. No guessing at test summaries or teardown output, because a general tracker cannot know what any project prints. |
| Trigger and wait, without burning minutes | trigger_workflow dispatches on request; if_absent=true answers "this commit already ran" without starting a second run. rerun_run(failed_only=true) repeats only the jobs that broke, after a local check that there are failed jobs. wait_for_run is a bounded long poll whose timeout comes from the workflow's own history. |
| PostgreSQL, and it says so | Log tables are partitioned by month so old data is one DROP TABLE; a trigram index accelerates searching them (pg_trgm, ~1× the log text in disk); the schema is the service's own renderer; the test suite runs against a real server. |
| A budget from real time, not the queue | Every run read carries timings: the jobs' span, the queue, and the span of the jobs that passed — the numbers a wait is sized from, so a queue behind other repositories does not inflate the p50/p90. db usage and ci_status.storage report what the database actually holds. |
| One image, two registries | images.yml publishes the same multi-arch build to Aliyun (vistart_public/github-actions-tracker) and Docker Hub (vistart/github-actions-tracker), tagged latest. Each destination has its own secrets, so either can be absent. It runs only when asked for, and build.revision — not a tag — says which build is running. |
| Metrics in the standard format | GET /metrics on the REST listener answers with the Prometheus text format: webhook deliveries, GitHub calls by status code, tool calls by outcome, connection-pool gauges via ci_status.health. Process-local counters; sum across instances in the scraper. |
Why you would use it
Three different things, and the third is the easiest to underestimate.
- Context: a 4,000-line job log becomes
grepand a few lines of context; a 12-job matrix becomes a 12-line roster. Some of that log does not fit in a context window at all, so the choice is not cheaper but possible. - Time:
wait_for_runis one bounded call instead of a polling loop;cancel_runandif_absent=truestop minutes you would otherwise spend, andtrigger_workflowreturns p50/p90 so you can decide what to wait for. - Wrong conclusions:
attempt/is_latestseparates a capacity blip from a broken backend;has_logplusreasonseparates "no output" from "nothing was captured";ci_status.health.alertsreports its own silent degradation as an executable list.
For the long version — including an operator's measured session and what we saw using the service on itself — see What it saves.
The advantage of a local cache
Once a log is stored, reading it is a local query — and a local query is cheap, repeatable, and parallel:
- Filters are local.
find_runsnarrows by commit, pull request, branch, workflow file or status against stored rows;recent_runsanswers for sixteen repositories in one call. None of that spends GitHub quota. - The text is local too. Windows,
grepand search run against one stored document, so partial reads are the normal case rather than an exception. - The pattern is yours. Failure, error, warning, or a test conclusion — the service returns the lines a caller's pattern matched and their line numbers. Switch test frameworks and one string changes; the tracker does not need to relearn what your output means.
- The database carries the load. A read is one query, not a poll: no background jobs, no queue, and PostgreSQL's parallel reads and cascades absorb whatever the filter admits.
Use it from your coding agent
The MCP endpoint is http://127.0.0.1:8001/mcp (Streamable HTTP). One line
per agent — the full configuration reference, including the shared-file shapes
and what each agent's approval gate does, is
MCP interface:
claude mcp add --transport http github-actions-tracker http://127.0.0.1:8001/mcp # Claude Code
codex mcp add github-actions-tracker --url http://127.0.0.1:8001/mcp # Codex (TOML)
opencode: "mcp": { "github-actions-tracker": { "type": "remote", "url": "…", "oauth": false } } # opencode.json
cmd mcp add --transport http github-actions-tracker http://127.0.0.1:8001/mcp # Command Code
With GHAT_API_KEY set, add --header "Authorization: Bearer <key>"
(Claude Code, Command Code), bearer_token_env_var (Codex) or an
Authorization header with oauth: false (OpenCode).
Where the details live
Read it online (no checkout needed): https://rhosocial.github.io/python-github-actions-tracker/ · 简体中文
- Documentation (English) — deployment, the API, the CLI, development
- 文档(简体中文)
License
python-github-actions-tracker MCP 질문
Does this service poll GitHub in the background?
No, it does not poll in the background or keep a central token pool; it reads GitHub Actions data when requested.
Can I trigger workflows through this service?
Yes, you can use the trigger_workflow command to dispatch workflows, with options to avoid duplicate runs if the commit has already run.