Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Changed the definition of "gluecron_ci_queue_status", "gluecron_get_workflow_run" and "gluecron_prioritize_workflow_run"
⟨46 unchanged words⟩ the slots it may hold while others wait (per work class, and across classes), a recommendation (e.g. batch changes into fewer pushes), and `explanation`: each work class's queued/running runs (interactive, review, push, schedule) and, for each of the repository's queued runs, its class and why it waits (code + sentence, from the claim plan itself). The same `ciQueue` block the write tools ⟨32 unchanged words⟩
⟨65 unchanged words⟩ 0 reachable, last seen 4m ago"). `workClass` (interactive / review / push / schedule — how the CI claim shares slots); a queued run carries `queue` ({code, text}: its place in the claim order, from the claim plan itself); a schedule run carries `coalescedFires` / `lastCoalescedAt`, and `coalescedNote` when later scheduled fires folded into it while it was queued.
⟨9 unchanged words⟩ : the runner claims it ahead of thefair-shareclass order,acrosshighestrepositories`level` first (normal < high < critical), then oldest (issue #10898). The lane holds at most a third of the runner slots, so prioritizing many runs cannot starve the rest. Calling again on a prioritized queued run changes its level. Only queued runs; a running or finished run is reported, not changed. Requires 'repo' scope and writeaccess.access; `high` and `critical` also require a site admin.
{"properties":{"level":{"description":"normal (default) | high | critical — high and critical need a site admin","type":"string"},"owner":{"type":"string"},"repo" ⟨25 unchanged words⟩
Added "gluecron_delete_variable", "gluecron_get_variable", "gluecron_list_variables" and 1 more (104 tools before, 108 now)
Delete an Actions variable by name. Pass owner + repo for a repository variable, owner + repo + environment for an environment variable, or org for an organisation variable (organisation variables need an admin-scoped token). A variable that does not exist is a not-found error, never reported as deleted. Audit-logged. Returns {name, deleted: true}.
Read one Actions variable by name. Pass owner + repo for a repository variable, owner + repo + environment for an environment variable, or org for an organisation variable (organisation variables need an admin-scoped token). Not found is an error. Returns {name, value, createdAt, updatedAt}.
List Actions configuration variables (${{ vars.NAME }}) with their values. Pass owner + repo for a repository variable, owner + repo + environment for an environment variable, or org for an organisation variable (organisation variables need an admin-scoped token). Admin of the repository or organisation only. Paged: limit (≤100, default 30) / offset. Mirrors GET …/actions/variables. Returns {scope, total, limit, offset, nextOffset, variables:[{name, value, createdAt, updatedAt}]}.
Added "gluecron_backup_status", "gluecron_learning_status", "gluecron_list_deleted_repos" and 2 more; changed the definition of "gluecron_delete_repo" (99 tools before, 104 now)
Permanently deleteDelete a repository — a SOFT delete (its2026-10-19): it disappears at once from git,dataweb, REST, MCP, CI, webhooks, search and pages, itsrowname stays reserved, and it can be restored with gluecron_restore_repo until restorable_until (90 days by default). Queued/running CI is cancelled and pending webhook deliveries are stopped. Only the repository OWNERmay:
Authorization not required, issuer https://gluecron.com
Added "gluecron_delete_repo_secret"; changed the definition of "gluecron_set_repo_secret" (98 tools before, 99 now)
⟨46 unchanged words⟩ audited — the result names the secret only. Pass expected_updated_at (the updated_at you last read) to update only if nobody changed it since: a newer value is never overwritten (error 'conflict'), a deleted secret is not re-created (error 'missing'). Setting the value it already has writes nothing (result 'unchanged'), so a retry is safe. Needs admin access to the repository and 'repo' scope. Audit-logged (name only). Returns {repository, name, created, result: 'created'|'updated'|'unchanged', updated_at}.
{"properties":{"expected_updated_at":{"description":"Optional ISO time: only update if the secret's updated_at is still this (from gluecron_list_repo_secrets)","type":"string"},"name":{"description":"Secret name: letters, ⟨43 unchanged words⟩
Added "gluecron_ci_executor"; changed the definition of "gluecron_ci_queue_status" and "gluecron_get_workflow_run" (97 tools before, 98 now)
⟨70 unchanged words⟩ tools return. Ask before a burst of pushes. Also `executor`: where CI runs (external runners or in-process), runners configured / reachable / busy, and `holdReason` when no runner can take a run. Read-only.
⟨40 unchanged words⟩ run that retried this one, or null). A queued run that no runner can take carries `queueReason` (e.g. "waiting for a runner: 2 configured, 0 reachable, last seen 4m ago").
Added "gluecron_get_token", "gluecron_list_tokens", "gluecron_revoke_token" and 1 more; changed the definition of "gluecron_delete_repo" (93 tools before, 97 now)
Permanently delete a repositoryrow(its git dataon disk isandleftitsuntouchedrow).RequiresOnly'admin'theaccessrepositoryonOWNER may: therepo
Added "gluecron_list_repo_secrets" and "gluecron_set_repo_secret" (91 tools before, 93 now)
List a repository's workflow secrets — NAMES ONLY, with created/updated times; values are never returned. Use it to check that a secret such as CRON_SECRET exists before a workflow needs it. Needs admin access to the repository and 'repo' scope. Returns {repository, total_count, secrets:[{name, created_at, updated_at}]}.
Create or replace one workflow secret on a repository, used in workflows as ${{ secrets.NAME }}. The name is saved upper-cased (cron_secret → CRON_SECRET); trailing spaces/newlines are removed from the value. The value is WRITE-ONLY: it is encrypted at rest and never returned, logged or audited — the result names the secret only. Needs admin access to the repository and 'repo' scope. Audit-logged (name only). Returns {repository, name, created}.
Authorization not required, issuer https://gluecron.com
Added "gluecron_approve_pr" and "gluecron_import_action"; changed the definition of "gluecron_create_repo_token" (89 tools before, 91 now)
⟨16 unchanged words⟩ REST API (/api/v2 and the GitHub-compatible /api/v3)and, git over HTTPS and the container registry (images under owner/repo, by contents) for that repository only. `permissions` sets none/read/write for ⟨7 unchanged words⟩ and settings are never grantable); `expires_in` isrequiredoptional: omit it (or "never") for no expiration, or give seconds or "30m", "12h", "7d", "1y";(min 5 minutes, max 1 year). Effective ⟨37 unchanged words⟩
Authorization not required, issuer https://gluecron.com
Added "gluecron_get_branch_protection", "gluecron_get_pr_checks", "gluecron_rerun_failed_jobs" and 3 more (83 tools before, 89 now)
Read the branch-protection rule that applies to a branch (exact name or the glob that covers it): required checks, require_pr_run, required approvals, AI / human review, green gates, force-push / deletion, auto-merge. Read-only. Returns {protected: false} when no rule applies, else {protected: true, pattern, matched_by, required_checks, …}.
List every check at a PR's current head — workflow runs, gates and commit statuses — with status, conclusion, whether branch protection requires it, and the run's log URL; plus each required check's state (passing / pending / failing / missing) and the merge gate's own CI verdict. Read-only. Returns {head_sha, total_count, check_runs, required, ci}.
Re-run a failed or cancelled workflow run at the SAME commit (same inputs, same PR merge preview) — the run page's Re-run. Gluecron re-runs every job of the run (per-job re-run does not exist yet); a successful or still-running run is refused. Joins an identical queued run instead of stacking another. Requires write access and 'repo' scope. Returns {runId, previousRunId, joinedExistingRun, url}.
Added "gluecron_dismiss_review", "gluecron_list_flaky_tests" and "gluecron_review_deployment"; changed the definition of "gluecron_assign_issue", "gluecron_get_workflow_logs" and "gluecron_request_changes" (80 tools before, 83 now)
Assign (or, with remove: true, unassign) users on an issuetoorapulluser.request.GluecronRealdoesassigneesnotsinceyet2026-10-12have—a
Authorization not required, issuer https://gluecron.com
Added "gluecron_explain_failure"; changed the definition of "gluecron_apply_patch" (79 tools before, 80 now)
⟨70 unchanged words⟩ head (created from `base_branch` if missing); blank context lines a transport stripped to empty lines, or trimmed off the end of the patch, are restored first (git still checks them against the file). `expected_head_sha` makes it compare-and-swap (all zeros = branch ⟨33 unchanged words⟩ , parent_sha, files_changed, files, commits, created} (+ blank_context_lines_restored / trimmed_blank_context_lines_restored when a repair was needed).
Explain a failed CI run: for each failed step, its class (compile / test / flaky / dependency / env / infra / lint / security / unknown) and the rule that chose it, the normalised error signature, failing tests, the files the commit touched, prior occurrences of the same failure (this repo, your other repos with the same owner or org, and platform-wide counts only) with the fix rate, and a suggested fix — the commit / PR that fixed it last time plus its diff limited to the relevant files, or the class's standard remedy. Infra and flaky failures never suggest a code change. `run_id` is the run…
Added "gluecron_handover" (78 tools before, 79 now)
Start here when picking up work: the live state of a repository, read from git and CI rather than from a handoff doc. Returns `summary` (one paragraph), `blockers` (most urgent first), the default branch's CI per workflow (red streak, since when, last green run), the build this Gluecron instance serves and how many commits it is behind (when it is this repository), every open PR grouped green / pending / failing / draft as the merge gate judges it, PRs merged in the last `merged_since_hours` (default 48), and the CI queue. Read-only.
Added "gluecron_create_repo_token", "gluecron_list_pr_comments", "gluecron_list_repo_tokens" and 2 more (73 tools before, 78 now)
Mint a fine-grained repository token (`gcft_…`) for ONE repository and return it once. It authenticates the REST API (/api/v2 and the GitHub-compatible /api/v3) and git over HTTPS for that repository only. `permissions` sets none/read/write for contents, issues, pull_requests, statuses and actions (admin and settings are never grantable); `expires_in` is required (seconds or "30m", "12h", "7d", "1y"; min 5 minutes, max 1 year). Effective access is always held to YOUR current access to the repo, re-checked on every use, and branch protection applies as it does to you. Needs 'repo' scope. Audit…
List every comment on a pull request in chronological order: general comments (kind `issue_comment`), inline review comments (`review_comment`: path, line, thread {id, inReplyToId, position, replies, resolved, resolvedAt, resolvedBy}) and review summaries (`review`: state approved | changes_requested | commented). Each entry has author {login, type user|bot}, isAi (written by an AI reviewer), body, createdAt, updatedAt. A review thread is the inline comments on one file+line; the earliest is its root and holds the resolved state. Gluecron does not store a review comment's commit or diff side,…
List the fine-grained repository tokens you have minted (never the secret): repository, permissions, state (active / expired / revoked), expiry and last use. Needs 'repo' scope.
Added "gluecron_create_deploy_token" and "gluecron_update_pr_branch"; changed the definition of "gluecron_get_workflow_logs", "gluecron_get_workflow_run", "gluecron_read_file" and 1 more (71 tools before, 73 now)
Returnconcatenatedaper-jobworkflow run's logsforplus aworkflowfailure summary. Always includes run metadata (number,plusworkflow, event, ref, sha), per-jobmetadata.and per-step status / exit code / duration, `failedSteps` (`job / step`) and `testFailures` (failing test names parsed from the failed steps, or the reason they cannot all be named; null when no job failed). `step` (a step name or 1-based position within its job) returns only that step's stdout/stderr; `tail_lines` keeps the last N lines. The full per-job logs are included only when neither is given.
Authorization not required, issuer https://gluecron.com
Changed the definition of "gluecron_list_runners"
⟨16 unchanged words⟩ , labels, slots, online, last seen,revoked,revoked; allowSharedOverflow (the setting); and sharedLane, whether the owner'sCIjobsmayactuallyoverflowruntoon sharedrunners.runners: 'used (no own runners)', 'overflow allowed' or 'not used (own runners only)', explained in sharedLaneDetail.
Authorization not required, issuer https://gluecron.com
Added "gluecron_ci_queue_status", "gluecron_create_runner_registration_token", "gluecron_list_runners" and 2 more; changed the definition of "gluecron_update_repo" (66 tools before, 71 now)
⟨14 unchanged words⟩ issue_triage_mode, auto_merge_mode, ci_autofix_mode, auto_repair_mode, auto_issues_mode,doc_drift_mode.doc_drift_mode, merge_train_mode. Values: off | suggest |auto.auto (merge_train_mode runs only on auto). Only the keys given change.","type": ⟨41 unchanged words⟩
How full the shared CI queue is, and what to do about it: level (ok / busy / saturated), runs queued and running, runner slots, estimated minutes before a new run starts, and — with owner+repo — that repository's queued/running runs, its share of CI work, the slots it may hold while others wait, and a recommendation (e.g. batch changes into fewer pushes). The same `ciQueue` block the write tools return. Ask before a burst of pushes. Read-only.
Added "gluecron_list_workflow_runs" (65 tools before, 66 now)
List a repository's workflow runs, newest first, with optional branch/status/event filters. Mirrors GET /api/v2/repos/.../actions/runs. The companion to gluecron_get_workflow_run / gluecron_cancel_workflow_run — this is how an agent finds the run ids to inspect or cancel (issue #10493: without it, stale queued runs could not be discovered from the tool surface at all).
Authorization not required, issuer https://gluecron.com
Changed the definition of "gluecron_acquire_lease", "gluecron_cancel_workflow_run", "gluecron_create_agent_session" and 2 more
Grab an exclusive lease on atargetPR,(e.g.issue, branch or file path in aPRrepositoryoryoubranch)can write, foranone of your agentsession.sessions. Pass owner+repo with a bare key (PR/issue number, branch name, path), or target_id '<repository id>:<key>'.
Added "gluecron_search_code" (64 tools before, 65 now)
Literal / regex code search (git grep, basic regex) across a repo at a ref. The dependable way to find code on this host — works on every repo, indexed or not. Returns {owner, repo, ref, total, truncated, matches: [{file, line, text}]}. Omit `ref` for the default branch.
Added "gluecron_apply_patch"; changed the definition of "gluecron_atomic_multi_file_commit", "gluecron_create_branch", "gluecron_delete_file" and 1 more (63 tools before, 64 now)
⟨33 unchanged words⟩ `{path, content?, content_base64?, deleted?}`. Meets the same branch protection, rulesets and secret scan as a git push, and fires CI/webhooks like one. Requires 'repo' scope.
⟨5 unchanged words⟩ pointing at an existing sha. Mirrors POST /api/v2/repos/.../git/refs. Gated like a push of the new branch (rulesets, secret scan of commits no other ref reaches) and fires CI/webhooks. Requires 'repo' scope. Returns {ref, sha}.
Authorization not required, issuer https://gluecron.com
Added "gluecron_whoami" (62 tools before, 63 now)
Who this connector is on this Gluecron instance: the signed-in username and email, whether that account is a site admin, the token's scopes, and how many repositories it owns or collaborates on. Call it first when a repository seems missing — the answer is usually which account authorized the connector. Anonymous callers get authenticated:false and a hint.
Changed the definition of "gluecron_search_repos"
Full-text search ofSearch repositories byname/descriptionowner, name, owner/name or description, case-insensitively: every public repo, plusyour ownthe private ones you own or collaborate on when authenticated. Omit `query` (authenticated) to list YOUR repositories — the ones you own or were invited to — instead of searching. Mirrors GET /api/v2/search/repos. `total` is the full match ⟨10 unchanged words⟩
⟨26 unchanged words⟩ "},"query":{"description":"Search keyword
Authorization not required, issuer https://gluecron.com
Changed the definition of "gluecron_clone_url", "gluecron_list_tree" and "gluecron_search_repos"
⟨16 unchanged words⟩ of embedding tokens in URLs. Returns {url, owner, repo, defaultBranch, hint}.using the repo's stored casing.
⟨16 unchanged words⟩ ":{"description":"Branch / tag /shasha. Omit (or pass HEAD) for the default branch.","type":"string"},"repo":{"type":"string"}},"required":["owner","repo","ref"],"type":"object"}
Changed the definition of "gluecron_pr_status_summary"
Compute a one-shot status summary for a PR: state, risk score (and whether it describes the current head), CI state for the head commit as the merge gate sees it, AI-review verdicts (trio), gate signals. Read-only.
Authorization not required, issuer https://gluecron.com
Authorization not required, issuer https://gluecron.com
Authorization not required, issuer https://gluecron.com
Authorization not required, issuer https://gluecron.com
Changed the definition of "gluecron_delete_repo", "gluecron_semantic_search" and "gluecron_update_repo"
⟨5 unchanged words⟩ git data on disk is left untouched).Owner-only.Requires 'admin' access on the repo (owner, org owners/admins, admin collaborators) AND 'admin' token scope. Returns {deleted: true}.
⟨25 unchanged words⟩ chunk index (code_chunks). Returns {hits, source, indexed, indexedFiles}.— `indexed: false` means the repo has never been indexed (empty hits are NOT 'no match'); `indexedFiles` is the live-index row count.
Certificate recorded, valid to 2026-11-30
Authorization not required, issuer https://gluecron.com
First tool surface recorded: 62 tools (server version 1.0)
Showing the latest 41 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
Create or replace an Actions variable (plain text, not for secrets — use gluecron_set_repo_secret). Pass owner + repo for a repository variable, owner + repo + environment for an environment variable, or org for an organisation variable (organisation variables need an admin-scoped token). Safe to retry: the same value again changes nothing. Audit-logged. Returns {name, effect: created|updated|unchanged, updatedAt}.
{"properties":{"owner":{"description":"Repo owner — username or organisation slug","type":"string"},"repo":{ ⟨10 unchanged words⟩
{"destructiveHint":true,"readOnlyHint":false,"title":"Delete repository (restorable)"}
Site admins only (needs an 'admin'-scoped token). Backup and restore-drill health: whether the newest backup set is verified on an offsite target and how old it is, whether offsite copies are immutable (Object Lock), when a restore drill last passed, whether the backup worker is running, plus targets (host/bucket, never keys), schedule and recent runs. A stale, failed, local-only or never-drilled backup reads RED. Pass start: 'backup' or 'drill' to queue one for the worker (picked up within 15 minutes; audit-logged). Returns {health, reasons, targets, problems, schedule, runs, started?}.
Site admins only (needs an 'admin'-scoped token). Whether CI failures are being turned into lessons: classified failures, lesson.pattern events (matched to a docs/ops/CI_GATE_LESSONS.md row, or candidates), recurring candidates, and failures left without a lesson for over an hour, over 7 days. 'N failures, 0 lessons' reads RED. Also each pattern's count and register row, and the register. Counts only: no log text or repository. Returns {health, patterns, register}.
List deleted repositories you can restore or purge: your personal ones and those of organizations you own (a site admin may pass all: true for the whole instance). Each has its id, full_name and restorable_until — after that date it is purged automatically. Read-only. Needs 'repo' scope. Returns {total_count, repositories:[{id, full_name, private, deleted_at, deleted_by, restorable_until}]}.
PERMANENTLY delete an already-deleted repository now, instead of waiting for its restore window to end. IRREVERSIBLE: the git data, LFS objects, issues, PRs, releases, packages, CI history and settings are removed and cannot be restored (data already in the instance's backups ages out on the backup schedule). Only works on a repository already deleted with gluecron_delete_repo; `confirm` must be its full name (owner/name). Owner (personal owner, or an org owner) or a site admin; needs 'admin' scope. Audited as repo.purge. Returns {purged: true, id, full_name}.
Restore a deleted repository by id (from gluecron_list_deleted_repos) before its restorable_until date: git data, LFS objects, issues, PRs, collaborators and webhooks come back exactly as they were. Cancelled CI runs stay cancelled and stopped webhook deliveries are not re-sent. Refused when another repository now has the same name in that namespace. Owner (personal owner, or an org owner) or a site admin; needs 'admin' scope. Audited as repo.restore. Returns {restored: true, id, full_name}.
Delete one workflow secret from a repository by name (cron_secret is read as CRON_SECRET). Idempotent: deleting a secret that is already gone succeeds with deleted:false, already_deleted:true, so a retry is safe. Workflows that reference it stop receiving it. Needs admin access to the repository and 'repo' scope. Audit-logged (name only). Returns {repository, name, deleted, already_deleted, at}.
Where CI runs and why: mode (external | in-process), declaration (external | in-process | auto) and its source (CI_EXECUTOR on the box, the estate-wide setting, or auto), runners configured / reachable / busy / slots, lastSeenAt, state (ok | degraded | unconfigured | in-process) and holdReason — the sentence every queued run shows when no runner can take it. In-process never runs while external runners are configured. Site admins (admin scope) also get per-runner rows and may pass `declare` (external | in-process | auto) to set the estate-wide setting, audited (the answer then carries `saved`…
One of your tokens by type and id (from gluecron_list_tokens): everything list shows plus the audit trail (create, edits with a before/after diff, rotations, revocation). Never the secret. `type` is pat (personal access token, glc_), repo (repository token, gcft_) or deploy (deploy token, gcdt_). Same scopes as gluecron_list_tokens.
List your own tokens (never a secret): type, name, status (active / expiring / expired / revoked / never_used / stale), last 4 characters, scopes or permissions, repository, expiry, last use (time, IP, client), use count and rotation state. `type` is pat (personal access token, glc_), repo (repository token, gcft_) or deploy (deploy token, gcdt_), or omit it for all three (types your token's scopes cannot read are listed under `omitted`). PATs need 'user' scope to read; repository and deploy tokens need 'repo'.
Revoke one of your tokens by type and id. It stops working on its next use; this cannot be undone. `type` is pat (personal access token, glc_), repo (repository token, gcft_) or deploy (deploy token, gcdt_). PATs need 'admin' scope; repository and deploy tokens need 'repo'. Audit-logged.
Rotate one of your tokens: mint a new secret with the same name, scopes / permissions, repository and expiry, returned ONCE as `token`. `grace_seconds` (default 0, max 604800 = 7 days) keeps the old secret working that long; 0 kills it now. Rotating again ends an earlier grace period. `expected_rotation_count` (from gluecron_get_token's rotationCount) makes it compare-and-swap; two concurrent rotations never both win. `type` is pat (personal access token, glc_), repo (repository token, gcft_) or deploy (deploy token, gcdt_). PATs need 'admin' scope; repository and deploy tokens need 'repo'. A…
{"properties":{"expires_in":{"description":"RequiredOptional lifetime: \"30m\" / \"12h\" ⟨9 unchanged words⟩ of seconds (5 minutes to 1 year). Omit, or \"never\", for no expiration.","type":"string"},"name":{"description" ⟨70 unchanged words⟩ :["owner","repo","name","permissions","expires_in"],"type":"object"}
Approve a pull request: records an 'approved' review by the caller — the same review the web form and POST /api/v2/repos/:owner/:repo/pulls/:number/reviews write, so it counts toward branch protection's required approvals and clears the caller's own earlier request for changes. The PR must be open; its author cannot approve it. Requires write access and 'repo' scope. To request changes use gluecron_request_changes. Returns {reviewId, number, state, url}.
Site admins only (needs an 'admin'-scoped token). Import a third-party GitHub Action at ONE tag, branch or full commit SHA into the Gluecron mirror namespace (gluecron-actions/<owner>--<repo>), so workflows that say `uses: owner/repo@ref` can run it. Workflow runs never fetch from github.com; an action that is not imported is skipped. Re-importing the same ref updates it to what upstream has now. Audit-logged. Returns {action, ref, sha, previousSha, mirror, upstreamUrl, hasActionYml}.
Arm (enabled: true) or disarm (enabled: false) auto-merge on one PR: it merges by itself through the full gated merge chain (CI, required checks, branch protection, CODEOWNERS, risk) once CI and every required check are green and no reviewer with write access has changes requested. Stays armed while anything is pending; `last_attempt.reason` says what it waits for. Requires write access and 'repo' scope. merge_method: 'merge' only. Returns {number, auto_merge}.
Set branch protection for one branch (partial update: fields you omit keep their value). Edits the rule named exactly after the branch; when only a glob rule covers it, a new exact rule is created seeded from the glob's settings and checks. required_checks replaces the required-check list ([] clears it). require_pr_run: a required check that names a workflow is met only by that workflow's pull_request run. Requires ADMIN access to the repo and 'repo' scope. Audit-logged. Returns the resulting rule plus {created, warnings}.
Edit a pull request's title, body, base branch and/or draft state. Title / body / base: the PR's author or anyone with write access; draft: the same rule as gluecron_set_pr_draft (write access and the PR author or repo owner; marking ready starts the AI review). Needs 'repo' scope. Changing the base (open PRs only) re-runs the PR's pull_request CI against the new base and disarms auto-merge. Returns {number, title, body, baseBranch, headBranch, isDraft, changed, autoMergeDisarmed, url}.
⟨4 unchanged words⟩ to assign","type":"string"},"assignees":{"description":"Usernames to assign, strings (alternative to `assignee`)","type":"array"},"number":{"type":"number"},"owner":{"type":"string"},"remove":{"description":"Unassign the given users instead (default false)","type":"boolean"},"repo":{"type":"string"},"type":{"description":"issue (default) | pull_request","type":"string"}},"required":["owner","repo","number","assignee"],"type":"object"}
{"destructiveHint":false,"idempotentHint":true,"readOnlyHint":false,"title":"Assign issue"}
⟨29 unchanged words⟩ / step`) and `testFailures` (failing test names,parsedread fromtheeachfailedstep'sstepsstructured results parsed before its log was cut, or the reason they cannot all be named; null when no job failed). `testFailures.details` marks each failure `flaky` (an active forensic label with a repro, from another run — with its label and flip rate), `known` (also failing on the default branch's latest run), `infra` (timed out under load) or `new`, with its file, message, the targeted retry's verdict and this run's determinism-forensics finding (`forensic`: class, label, variable, repro) when they ran. A step whose log was cut carries `fullLog` (artifact download of the uncut output). `step` (a step name or 1-based ⟨32 unchanged words⟩
PostRequest changes on a PR. Records a 'changes requested'AI-reviewreviewcommentby the caller, which holds the PR onaeveryPR.mergeThepathcomment(webisbutton,taggedAPI, MCP merge, merge queue, merge train, autopilot) until the caller approves or someone withisAiReview=truewritesoaccess dismisses it (gluecron_dismiss_review), and posts thegate-checkerbodyrecognisesasit.a comment. Requires 'repo'scope.scope and write access.
Dismiss the standing 'changes requested' reviews on a PR (all of them, or one reviewer's), so they no longer hold the merge. Requires 'repo' scope and write access; the reason is required and audited.
List a repository's flaky tests. A test is flaky only with a forensic repro: when it failed, CI re-ran just that test in the same order, alone, with the clock shifted +137 ms and +1 s, in TZ=Pacific/Chatham and in a fixed random order, and a variable flipped its verdict N times in a row on the same git tree. Each entry has the test, file, state (active / expired / resolved, or unexplained = flipped with no repro, NOT flaky), label (clock-dependent, order-dependent, concurrency-dependent), the variable, the exact repro command, owner, expiry, issue number, flip rate and evidence runs. Informat…
Approve or reject a workflow run's jobs waiting on a protected environment (`environment:` with required reviewers). The caller must be a reviewer of every environment selected (the environment's reviewers, or the repository owner when none are listed). An approval runs the job (after the environment's wait timer, if any); a rejection fails it. Mirrors POST /api/v2/repos/.../actions/runs/:id/pending_deployments. Requires 'repo' scope.
Revoke one of your fine-grained repository tokens by id (from gluecron_list_repo_tokens). It stops working on its next use. Needs 'repo' scope. Audit-logged.
Mark a pull request ready for review (draft=false) or convert it back to a draft (draft=true). Same rule as the web 'Ready for review' button: the caller needs write access and must be the PR author or the repository owner; only an open PR changes; marking ready starts the AI review. Idempotent. Requires 'repo' scope. Returns {number, isDraft, changed}.
⟨19 unchanged words⟩ 8+ hex characters)","type":"string"},"step":{"description":"Only this step's logs: its name (exact, else substring, case-insensitive) or its 1-based position within its job","type":"string"},"tail_lines":{"description":"Keep only the last N lines of each returned log (max 5000)","type":"number"}},"required":["owner","repo"," ⟨3 unchanged words⟩
Fetch a workflow run's metadata + status. Mirrors GET /api/v2/repos/.../actions/runs/:id. Also says how it relates to automatic retries: `retryOf` / `retryOfRunNumber` (the run this one retries after a deploy or a lost runner) and `retriedAs` ({id, runNumber} of the run that retried this one, or null).⟨15 unchanged words⟩ :path. Returns {path, size, content, encoding, totalLines}. Pass `start_line` / `end_line` (1-based, inclusive) to read only part of a text file. A text file over ~60 KB read with no range returns its first ~60 KB of whole lines with `truncated: true`, `startLine`/`endLine` and a hint — ask for the next range to read on.
⟨5 unchanged words⟩ or 'base64'","type":"string"},"end_line":{"description":"Last line to return (1-based, inclusive; clamped to the file's length). Text files only.","type":"number"},"owner":{"type":"string"},"path" ⟨12 unchanged words⟩ "string"},"repo":{"type":"string"},"start_line":{"description":"First line to return (1-based, inclusive). Text files only.","type":"number"}},"required":["owner","repo" ⟨3 unchanged words⟩
⟨25 unchanged words⟩ works on every repo, indexed or not. Optional scoping: `path` (a directory or file prefix, literal), `glob` (git pathspec glob such as `src/**/*.ts`, relative to `path` when both are given), `ignore_case`, and `files_only` (unique files with match counts instead of lines). Returns {owner, repo, ref, total, truncated, matches: [{file, line, text}]}, or with files_only {owner, repo, ref, total, totalMatches, truncated, files: [{file, count}]}. Omit `ref` for the default branch.
{"properties":{"files_only":{"description":"Return unique files with match counts instead of matching lines","type":"boolean"},"glob":{"description":"Only search files matching this git pathspec glob (e.g. **/*.test.ts); relative to `path` when both are given","type":"string"},"ignore_case":{"description":"Case-insensitive match (default false)","type":"boolean"},"limit":{"description":"Max matches, or max files with files_only (default 50, max 200)","type":"number"},"owner":{"type":"string"},"path":{"description":"Only search under this repo-relative directory or file (literal prefix, e.g. src/lib)","type":"string"},"query":{"description ⟨30 unchanged words⟩
Mint a short-lived, repository-scoped HTTPS clone credential (a deploy token) and return it once with a ready clone URL — for a sandbox or CI box that has no PAT. Read-only by default; `read_only: false` asks for push access and is granted only if you have write access. Expires in 2 h by default (`expires_in_hours`, max 24). Needs owner / collaborator / team / org access to the repo (public read is not enough) and 'repo' scope. Audit-logged. Returns {id, title, readOnly, expiresAt, token, cloneUrl, url}.
Bring a PR branch up to date with its base: merge the base into the head server-side (the PR page's 'Update branch'). Never a force-push — the new head is a merge commit moved through the push gates, so it gets CI. On conflict nothing changes and `conflictFiles` lists the paths. Requires write access and 'repo' scope. Returns {ok, status: 'updated'|'up-to-date', headSha, previousHeadSha, baseSha, url} or {ok: false, reason, message, conflictFiles}.
Create a one-time CI runner registration token for an owner (your username, an org you own or admin, or 'platform' as a site admin). A runner started with RUNNER_REGISTRATION_TOKEN=<token> registers once and gets its own long-lived credential; that owner's CI then runs on it. Expires in an hour. Returns {owner, token, expiresAt, gluecronUrl}.
List the CI runners registered to an owner (username, org slug, or 'platform'): id, name, url, labels, slots, online, last seen, revoked, and whether the owner's CI may overflow to shared runners.
Move a QUEUED workflow run into the priority lane: the runner claims it ahead of the fair-share order across repositories (issue #10898). Only queued runs; a running or finished run is reported, not changed. Requires 'repo' scope and write access.
Revoke a CI runner by id: nothing is dispatched to it from now on, its next heartbeat is refused and it stops accepting jobs. Cannot be undone — register a new runner instead. Returns {id, revoked}.
⟨4 unchanged words⟩ "},"duration_ms":{"description":"Lease duration, clamped to 1 second – 1 hour (default 5 minutes)","type":"number"},"owner":{"description":"Repository owner (optional, with repo)","type":"string"},"repo":{"description":"Repository name (optional, with owner)","type":"string"},"target_id":{"description":"PR/issue number, branch name or file path (with owner+repo, or a session scoped to a repo); '<repository id>:<key>'; or a PR/issue id","type":"string"},"target_type":{"description":"e.g.'issue''pull_request',| 'pr' | 'branch' | 'file_path'","type":"string"}},"required": ⟨5 unchanged words⟩
⟨5 unchanged words⟩ {"type":"string"},"run_id":{"description":"The run's id, or a unique leading part of it (8+ hex characters)","type":"string"}},"required":["owner ⟨4 unchanged words⟩
⟨29 unchanged words⟩ string"},"repository_id":{"description":"Optionalrepoid of a repository you can write, to scope the session to","type":"string"}},"required ⟨3 unchanged words⟩
⟨5 unchanged words⟩ {"type":"string"},"run_id":{"description":"The run's id, or a unique leading part of it (8+ hex characters)","type":"string"}},"required":["owner ⟨4 unchanged words⟩
⟨5 unchanged words⟩ {"type":"string"},"run_id":{"description":"The run's id, or a unique leading part of it (8+ hex characters)","type":"string"}},"required":["owner ⟨4 unchanged words⟩
⟨12 unchanged words⟩ blob sha (optimistic concurrency) and 'repo' scope. Meets the same branch protection, rulesets and secret scan as a git push, and fires CI/webhooks like one. Mirrors DELETE /api/v2/contents.
⟨15 unchanged words⟩ as a UTF-8 string OR `content_base64` for binary. Meets the same branch protection, rulesets and secret scan as a git push, and fires CI/webhooks like one. Requires 'repo' scope.
Commit a patch to a branch without sending whole files — the way to change a few lines of a large file. `patch` is a unified diff as `git diff` prints it (one commit, `message` required) OR `git format-patch` mbox output (each patch becomes its own commit with the patch's own message and author, like `git am`; `message` is ignored). Applied server-side with `git apply --cached` against the branch head (created from `base_branch` if missing); `expected_head_sha` makes it compare-and-swap (all zeros = branch must not exist yet). Meets the same branch protection, rulesets and secret scan as a gi…
Full-text search ofpublicrepositories by name/description,case-insensitively.case-insensitively: every public repo, plus your own private ones when authenticated. Mirrors GET /api/v2/search/repos. `total` is the full match ⟨10 unchanged words⟩
Update repository description / visibility / default_branch.Owner-only.Requires 'admin' access on the repo (owner, org owners/admins, admin collaborators) and 'repo' scope. Returns {ok: true}.