Gluecron
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (12)
- HIGH
- MEDIUMin gluecron_repo_health
- LOWin gluecron_repo_explain_codebase
- LOWin gluecron_clone_url
- LOWin gluecron_assign_issue
- LOWin gluecron_propose_migration
- LOWin gluecron_release_lease
- LOWin gluecron_get_agent_budget
- LOWin gluecron_generate_pr_description
- LOWin gluecron_atomic_multi_file_commit
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"gluecron": {
"url": "https://gluecron.com/mcp"
}
}
}Remote-Endpunkte
https://gluecron.com/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (63)
🟢gluecron_repo_search(query, limit, offset)
Search Gluecron repositories by keyword (name + description), case-insensitively. Returns public repos plus any private repos owned by the authenticated caller. Default 20 per page, max 50; `total` is the full match count and `nextOffset` pages through it.
Eingabe-Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search keyword (1-100 chars)"
},
"limit": {
"type": "number",
"description": "Max rows per page (default 20, max 50)"
},
"offset": {
"type": "number",
"description": "Rows to skip. Use `nextOffset` from the previous response."
}
},
"required": [
"query"
]
}🟢gluecron_repo_read_file(owner, repo, ref, path)
Read a single file from a repository at a given ref (branch / tag / commit). Private repos are readable when the authenticated caller has access. Returns the text content (binary files rejected).
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"ref": {
"type": "string",
"description": "Branch / tag / commit. Defaults to the repository's actual default branch (which may not be 'main' — e.g. 'Main')."
},
"path": {
"type": "string",
"description": "File path within the repo"
}
},
"required": [
"owner",
"repo",
"path"
]
}🟢gluecron_repo_list_issues(owner, repo, limit, offset)
List open issues for a public repository. Returns up to 50 ordered by most-recent.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"limit": {
"type": "number",
"description": "Max rows per page (default 25, max 50)"
},
"offset": {
"type": "number",
"description": "Rows to skip, for paging. Use `nextOffset` from the previous response."
}
},
"required": [
"owner",
"repo"
]
}🟢gluecron_repo_explain_codebase(owner, repo)
Return the cached AI 'explain this codebase' Markdown for a public repo (most recent commit). Returns null when no cached explanation exists yet.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
}
},
"required": [
"owner",
"repo"
]
}🟢gluecron_repo_health(owner, repo)
Compute the current health report for a public repo: overall score (0-100), letter grade, per-category breakdown (security/testing/complexity/dependencies/documentation/activity), and a list of insights to fix next. Backed by computeHealthScore in src/lib/intelligence.ts.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
}
},
"required": [
"owner",
"repo"
]
}🟡gluecron_create_issue(owner, repo, title, body)
Create a new issue on a Gluecron repository. Requires authenticated caller with write access on the target repo. Returns {number, url}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"title": {
"type": "string",
"description": "Issue title"
},
"body": {
"type": "string",
"description": "Issue body (Markdown). Optional."
}
},
"required": [
"owner",
"repo",
"title"
]
}🟡gluecron_comment_issue(owner, repo, number, body)
Add a comment to an existing issue. Requires authenticated caller with write access. Returns {commentId}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"number": {
"type": "number",
"description": "Issue number"
},
"body": {
"type": "string",
"description": "Comment body (Markdown)"
}
},
"required": [
"owner",
"repo",
"number",
"body"
]
}🔴gluecron_close_issue(owner, repo, number)
Close an open issue. Requires authenticated caller with write access. Idempotent — closing an already-closed issue is a no-op. Returns {state}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"number": {
"type": "number",
"description": "Issue number"
}
},
"required": [
"owner",
"repo",
"number"
]
}🟡gluecron_reopen_issue(owner, repo, number)
Reopen a previously closed issue. Requires authenticated caller with write access. Idempotent. Returns {state}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"number": {
"type": "number",
"description": "Issue number"
}
},
"required": [
"owner",
"repo",
"number"
]
}🟡gluecron_create_pr(owner, repo, title, body, head_branch, ...)
Open a new pull request. `head_branch` is required; `base_branch` defaults to the repo default branch. Requires authenticated caller with write access. Returns {number, url}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"title": {
"type": "string",
"description": "PR title"
},
"body": {
"type": "string",
"description": "PR body (Markdown). Optional."
},
"head_branch": {
"type": "string",
"description": "Branch with the changes"
},
"base_branch": {
"type": "string",
"description": "Target branch (default: repo default branch)"
}
},
"required": [
"owner",
"repo",
"title",
"head_branch"
]
}🟢gluecron_get_pr(owner, repo, number)
Fetch the full detail record of a pull request (title, body, state, branches, draft, author, timestamps). Authenticated callers only (the read tool surface still works anonymously).
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"number": {
"type": "number",
"description": "PR number"
}
},
"required": [
"owner",
"repo",
"number"
]
}🟢gluecron_list_prs(owner, repo, state, limit, offset)
List pull requests on a repo, filtered by state (open|closed|merged|all). Authenticated callers only. Returns up to 50 summary rows.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"state": {
"type": "string",
"description": "open | closed | merged | all (default: open)"
},
"limit": {
"type": "number",
"description": "Max rows per page (default 50, max 100)"
},
"offset": {
"type": "number",
"description": "Rows to skip, for paging. Use `nextOffset` from the previous response."
}
},
"required": [
"owner",
"repo"
]
}🟡gluecron_comment_pr(owner, repo, number, body)
Add a comment to a pull request. Requires authenticated caller with write access. Returns {commentId}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"number": {
"type": "number",
"description": "PR number"
},
"body": {
"type": "string",
"description": "Comment body (Markdown)"
}
},
"required": [
"owner",
"repo",
"number",
"body"
]
}🔴gluecron_merge_pr(owner, repo, number, confirm_high_risk)
Merge an open PR. Enforces the same checks as the HTTP merge flow: not a draft, head SHA resolves, GateTest+AI-review hard gates pass, branch-protection rules satisfied. M3: soft-blocks when the pre-merge risk score is `critical` unless `confirm_high_risk: true` is passed. Returns {merged, sha?, reason?, riskScore?}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"number": {
"type": "number",
"description": "PR number"
},
"confirm_high_risk": {
"type": "boolean",
"description": "When true, bypass the M3 risk-score soft-block on critical-band PRs."
}
},
"required": [
"owner",
"repo",
"number"
]
}🔴gluecron_close_pr(owner, repo, number)
Close an open pull request without merging. Requires authenticated caller with write access. Idempotent. Returns {state}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner — username or organisation slug"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"number": {
"type": "number",
"description": "PR number"
}
},
"required": [
"owner",
"repo",
"number"
]
}🟡gluecron_fork_repo(owner, repo)
Fork a repository to the authenticated caller's namespace. Mirrors POST /:owner/:repo/fork. Returns {owner, repo, url}. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Source repo owner"
},
"repo": {
"type": "string",
"description": "Source repo name"
}
},
"required": [
"owner",
"repo"
]
}🔴gluecron_delete_repo(owner, repo)
Permanently delete a repository row (git data on disk is left untouched). Requires 'admin' access on the repo (owner, org owners/admins, admin collaborators) AND 'admin' token scope. Returns {deleted: true}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner username"
},
"repo": {
"type": "string",
"description": "Repo name"
}
},
"required": [
"owner",
"repo"
]
}🔴gluecron_update_repo(owner, repo, description, is_private, default_branch, ...)
Update repository description / visibility / default_branch. Requires 'admin' access on the repo (owner, org owners/admins, admin collaborators) and 'repo' scope. Returns {ok: true}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner username"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"description": {
"type": "string",
"description": "New description (optional)"
},
"is_private": {
"type": "boolean",
"description": "Set visibility (optional)"
},
"default_branch": {
"type": "string",
"description": "Set default branch (optional)"
},
"automation": {
"type": "object",
"description": "Per-repo automation dials, same keys as Settings → Automation: ai_review_mode, pr_triage_mode, issue_triage_mode, auto_merge_mode, ci_autofix_mode, auto_repair_mode, auto_issues_mode, doc_drift_mode. Values: off | suggest | auto. Only the keys given change."
}
},
"required": [
"owner",
"repo"
]
}🟢gluecron_search_repos(query, sort, limit, offset)
Search repositories by owner, name, owner/name or description, case-insensitively: every public repo, plus the 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 count (not the page size) and `nextOffset` pages through it.
Eingabe-Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Search keyword — matches owner login, repo name, owner/name and description. Omit to list your own repositories."
},
"sort": {
"type": "string",
"description": "stars | updated | name (default: stars)"
},
"limit": {
"type": "number",
"description": "Max rows per page (default 30, max 100)"
},
"offset": {
"type": "number",
"description": "Rows to skip. Use `nextOffset` from the previous response."
}
}
}🟢gluecron_whoami
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.
Eingabe-Schema
{
"type": "object",
"properties": {}
}🟢gluecron_clone_url(owner, repo)
Return the authenticated HTTPS clone URL for a repo + a credential-helper hint. Use this instead of embedding tokens in URLs. Returns {url, owner, repo, defaultBranch, hint} using the repo's stored casing.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner username"
},
"repo": {
"type": "string",
"description": "Repo name"
}
},
"required": [
"owner",
"repo"
]
}⚪gluecron_label_issue(owner, repo, number, labels)
Attach one or more labels to an issue. Labels are created if they don't yet exist on the repo. Requires 'repo' scope. Returns {labels}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"number": {
"type": "number"
},
"labels": {
"type": "array",
"description": "Label names (strings)"
}
},
"required": [
"owner",
"repo",
"number",
"labels"
]
}⚪gluecron_unlabel_issue(owner, repo, number, label)
Detach a label from an issue. Idempotent. Requires 'repo' scope. Returns {removed: boolean}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"number": {
"type": "number"
},
"label": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"number",
"label"
]
}⚪gluecron_assign_issue(owner, repo, number, assignee)
Assign an issue to a user. Gluecron does not yet have a dedicated assignee table; assignment is modelled as an `assignee:<username>` label so it integrates with existing label tooling. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"number": {
"type": "number"
},
"assignee": {
"type": "string",
"description": "Username to assign"
}
},
"required": [
"owner",
"repo",
"number",
"assignee"
]
}🟢gluecron_search_issues(owner, repo, query, state, limit)
Search issues by title/body keyword on a single repo, filtered by state. Returns ranked rows.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"query": {
"type": "string",
"description": "Search keyword"
},
"state": {
"type": "string",
"description": "open | closed | all (default open)"
},
"limit": {
"type": "number"
}
},
"required": [
"owner",
"repo",
"query"
]
}🟡gluecron_request_changes(owner, repo, number, body)
Post a 'changes requested' AI-review comment on a PR. The comment is tagged with isAiReview=true so the gate-checker recognises it. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"number": {
"type": "number"
},
"body": {
"type": "string",
"description": "Review body (Markdown)"
}
},
"required": [
"owner",
"repo",
"number",
"body"
]
}🟢gluecron_search_prs(owner, repo, query, state, limit)
Search pull requests by title/body keyword on a repo.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"query": {
"type": "string"
},
"state": {
"type": "string",
"description": "open|closed|merged|all (default open)"
},
"limit": {
"type": "number"
}
},
"required": [
"owner",
"repo",
"query"
]
}🟡gluecron_open_draft_pr(owner, repo, title, body, head_branch, ...)
Open a draft pull request. Same payload as gluecron_create_pr but forces is_draft=true. Useful for AI-in-progress PRs that shouldn't run mergeability checks yet.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"title": {
"type": "string"
},
"body": {
"type": "string"
},
"head_branch": {
"type": "string"
},
"base_branch": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"title",
"head_branch"
]
}🟢gluecron_generate_pr_description(diff, style)
Generate an AI commit-message-style description for a diff. Uses src/lib/ai-commit-message.ts under the hood; gracefully degrades to a heuristic when ANTHROPIC_API_KEY is missing. Returns {subject, body}.
Eingabe-Schema
{
"type": "object",
"properties": {
"diff": {
"type": "string",
"description": "Unified-diff body"
},
"style": {
"type": "string",
"description": "'conventional' (default) or 'plain'"
}
},
"required": [
"diff"
]
}🟢gluecron_read_file(owner, repo, ref, path, encoding)
Read a file from a repo at a given ref. Mirrors GET /api/v2/repos/:owner/:repo/contents/:path. Returns {path, size, content, encoding}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"ref": {
"type": "string",
"description": "Branch / tag / sha (default HEAD)"
},
"path": {
"type": "string"
},
"encoding": {
"type": "string",
"description": "'utf8' (default) or 'base64'"
}
},
"required": [
"owner",
"repo",
"path"
]
}🟡gluecron_write_file(owner, repo, path, branch, message, ...)
Create or update a file on a branch via git plumbing. Wraps `createOrUpdateFileOnBranch`. Pass `content` as a UTF-8 string OR `content_base64` for binary. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"path": {
"type": "string"
},
"branch": {
"type": "string"
},
"message": {
"type": "string",
"description": "Commit message"
},
"content": {
"type": "string",
"description": "UTF-8 file body (optional)"
},
"content_base64": {
"type": "string",
"description": "Base64 file body (optional)"
},
"expect_blob_sha": {
"type": "string",
"description": "Optimistic-concurrency check: existing blob sha must match."
}
},
"required": [
"owner",
"repo",
"path",
"branch",
"message"
]
}🔴gluecron_delete_file(owner, repo, path, branch, message, ...)
Delete a file from a branch via git plumbing. Requires the existing blob sha (optimistic concurrency) and 'repo' scope. Mirrors DELETE /api/v2/contents.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"path": {
"type": "string"
},
"branch": {
"type": "string"
},
"message": {
"type": "string"
},
"sha": {
"type": "string",
"description": "Current blob sha (40-hex)"
}
},
"required": [
"owner",
"repo",
"path",
"branch",
"message",
"sha"
]
}🟢gluecron_list_tree(owner, repo, ref, path, recursive)
List directory contents at a ref. `path` scopes the listing to a subtree and is honoured in BOTH modes; `recursive: true` walks the whole subtree instead of one level. Always returns the same shape: {path, ref, recursive, entries, truncated, totalCount}. Recursive entries carry full repo-relative paths; non-recursive entries carry names. A ref that does not exist is an error, never an empty listing.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"ref": {
"type": "string",
"description": "Branch / tag / sha. Omit (or pass HEAD) for the default branch."
},
"path": {
"type": "string",
"description": "Sub-path within the repo"
},
"recursive": {
"type": "boolean"
}
},
"required": [
"owner",
"repo"
]
}🟢gluecron_get_commit(owner, repo, sha, include_files)
Fetch a single commit by SHA: metadata plus the list of files it changed (path, status, additions, deletions). Mirrors GET /api/v2/repos/.../commits/:sha. Patch bodies are NOT included — use gluecron_get_diff for those.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"sha": {
"type": "string",
"description": "Commit SHA"
},
"include_files": {
"type": "boolean",
"description": "Include the files-changed summary and stats (default true). Set false to skip the diff read on very large commits."
}
},
"required": [
"owner",
"repo",
"sha"
]
}🟢gluecron_get_diff(owner, repo, sha, base, head, ...)
Read the actual changes in a commit or a branch range. Pass `sha` for one commit against its first parent, or `base`+`head` for everything head adds since the merge base (what a PR proposes). Returns {files:[{path, oldPath?, status, additions, deletions, binary, patch, patchTruncated}], stats, truncated}. Patch text is byte-capped; set include_patch=false for a files-changed summary only.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"sha": {
"type": "string",
"description": "Commit SHA — diffs it against its first parent"
},
"base": {
"type": "string",
"description": "Base ref (with `head`)"
},
"head": {
"type": "string",
"description": "Head ref (with `base`)"
},
"include_patch": {
"type": "boolean",
"description": "Include patch bodies (default true)"
},
"max_patch_bytes": {
"type": "number",
"description": "Total budget for patch text across all files (default 400000, max 2000000)"
}
},
"required": [
"owner",
"repo"
]
}🟡gluecron_create_branch(owner, repo, branch, sha)
Create a new branch ref pointing at an existing sha. Mirrors POST /api/v2/repos/.../git/refs. Requires 'repo' scope. Returns {ref, sha}.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"branch": {
"type": "string",
"description": "New branch name (short form)"
},
"sha": {
"type": "string",
"description": "Target commit sha (40-hex)"
}
},
"required": [
"owner",
"repo",
"branch",
"sha"
]
}🟡gluecron_atomic_multi_file_commit(owner, repo, branch, base_branch, message, ...)
Apply a set of file writes + deletes as a single atomic commit on a branch (creates the branch if it doesn't exist). The killer agent tool: blob/tree/commit/ref-update sequence. Each change is `{path, content?, content_base64?, deleted?}`. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"branch": {
"type": "string"
},
"base_branch": {
"type": "string",
"description": "Branch to fork from when `branch` doesn't yet exist (default: repo default)."
},
"message": {
"type": "string"
},
"changes": {
"type": "array",
"description": "Array of {path, content?|content_base64?, deleted?} entries."
}
},
"required": [
"owner",
"repo",
"branch",
"message",
"changes"
]
}🔴gluecron_ship_spec(owner, repo, title, body)
Drop a spec file in .gluecron/specs/ with status: ready so the autopilot picks it up. Wraps voice-to-pr.shipAsSpec — handle both voice + manual specs. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"title": {
"type": "string"
},
"body": {
"type": "string",
"description": "Spec body (Markdown)"
}
},
"required": [
"owner",
"repo",
"title",
"body"
]
}🟡gluecron_voice_to_pr(owner, repo, transcript, as)
Interpret a free-form voice transcript and either ship it as a spec or create an issue (caller picks via `as`). Wraps src/lib/voice-to-pr.ts. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"transcript": {
"type": "string"
},
"as": {
"type": "string",
"description": "'spec' or 'issue' (default: auto via interpretVoiceTranscript)"
}
},
"required": [
"owner",
"repo",
"transcript"
]
}⚪gluecron_refactor_across_repos(description, repository_ids, dry_run)
Plan + execute a refactor that spans multiple repos owned by the caller. Wraps src/lib/multi-repo-refactor.ts. `dry_run: true` returns the plan only. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"description": {
"type": "string",
"description": "Natural-language description"
},
"repository_ids": {
"type": "array",
"description": "Optional explicit repo IDs to scope the refactor to."
},
"dry_run": {
"type": "boolean",
"description": "When true, returns the plan and does NOT execute."
}
},
"required": [
"description"
]
}🟢gluecron_explain_repo(owner, repo)
Return the cached AI 'explain this codebase' Markdown for a repo. Pure read — never triggers a new generation (use the web UI for that).
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
}
},
"required": [
"owner",
"repo"
]
}⚪gluecron_chat_with_repo(owner, repo, message, title)
Start a new chat with a repo: creates a chat row, sends the first user message, streams + persists the assistant reply. Returns {chat_id, reply}. If the AI service does not answer this fails with a JSON-RPC error carrying {chat_id, ai_error} — it never returns apology copy as a reply. Requires authentication.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"message": {
"type": "string",
"description": "Initial user message"
},
"title": {
"type": "string",
"description": "Chat title (optional)"
}
},
"required": [
"owner",
"repo",
"message"
]
}🟡gluecron_chat_continue(chat_id, message)
Send another message to an existing repo chat. Returns the assistant's reply. If the AI service does not answer this fails with a JSON-RPC error carrying {chat_id, ai_error} rather than returning apology copy as a reply.
Eingabe-Schema
{
"type": "object",
"properties": {
"chat_id": {
"type": "string"
},
"message": {
"type": "string"
}
},
"required": [
"chat_id",
"message"
]
}⚪gluecron_generate_tests(owner, repo, number, mode)
Generate tests for a PR via Claude. Wraps src/lib/ai-test-generator.generateTestsForPr. Mode 'follow-up-pr' opens a new PR; 'append-commit' commits onto the head branch. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"number": {
"type": "number",
"description": "PR number"
},
"mode": {
"type": "string",
"description": "'follow-up-pr' or 'append-commit'"
}
},
"required": [
"owner",
"repo",
"number"
]
}🟢gluecron_generate_commit_message(diff, style)
Generate a commit message for a diff. Same engine as gluecron_generate_pr_description but explicit for the commit-message use case.
Eingabe-Schema
{
"type": "object",
"properties": {
"diff": {
"type": "string"
},
"style": {
"type": "string",
"description": "'conventional' (default) or 'plain'"
}
},
"required": [
"diff"
]
}🟢gluecron_generate_release_notes(owner, repo, from_tag, to_tag)
Generate release notes between two tags. Wraps src/lib/ai-release-notes.generateReleaseNotes. Returns the rendered Markdown + section data.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"from_tag": {
"type": "string",
"description": "Previous tag (optional)"
},
"to_tag": {
"type": "string",
"description": "New tag"
}
},
"required": [
"owner",
"repo",
"to_tag"
]
}⚪gluecron_propose_migration(owner, repo, dependency, from_version, to_version, ...)
Propose a dependency-upgrade PR. Wraps src/lib/migration-assistant.proposeMajorMigration. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"dependency": {
"type": "string"
},
"from_version": {
"type": "string"
},
"to_version": {
"type": "string"
},
"base_sha": {
"type": "string",
"description": "Commit sha to fork from"
},
"changelog": {
"type": "string",
"description": "Optional changelog text"
}
},
"required": [
"owner",
"repo",
"dependency",
"from_version",
"to_version",
"base_sha"
]
}🟡gluecron_propose_doc_update(owner, repo)
Manual trigger for the AI doc-update flow: scans tracked sections on the default branch and opens a PR rewriting stale prose. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
}
},
"required": [
"owner",
"repo"
]
}🟡gluecron_trigger_workflow(owner, repo, filename, ref, inputs)
Dispatch a workflow_dispatch run. Mirrors POST /api/v2/repos/.../actions/workflows/:filename/dispatches. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"filename": {
"type": "string",
"description": "Workflow filename (e.g. ci.yml)"
},
"ref": {
"type": "string",
"description": "Branch / tag / sha (default: repo default branch)"
},
"inputs": {
"type": "object",
"description": "Workflow inputs (object)"
}
},
"required": [
"owner",
"repo",
"filename"
]
}🟢gluecron_get_workflow_run(owner, repo, run_id)
Fetch a workflow run's metadata + status. Mirrors GET /api/v2/repos/.../actions/runs/:id.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"run_id": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"run_id"
]
}🟢gluecron_get_workflow_logs(owner, repo, run_id)
Return concatenated per-job logs for a workflow run, plus per-job metadata. JSON-friendly companion to the ZIP-download endpoint.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"run_id": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"run_id"
]
}🔴gluecron_cancel_workflow_run(owner, repo, run_id)
Cancel a queued/running workflow run. Requires 'repo' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"run_id": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"run_id"
]
}🟢gluecron_get_preview_url(owner, repo, branch)
Return the branch-preview URL + status for a (repo, branch) pair. Wraps branch-previews.getPreviewForBranch. Returns {ok:false, reason:'not enabled on this host'} when the host has no PREVIEW_DOMAIN (no preview would ever resolve).
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"branch": {
"type": "string"
}
},
"required": [
"owner",
"repo",
"branch"
]
}⚪gluecron_provision_pr_sandbox(owner, repo, number)
Provision (or re-provision) a sandbox for a PR. Wraps pr-sandbox.provisionSandbox. Requires 'repo' scope. Returns {ok:false, reason:'not enabled on this host'} when no sandbox provisioner runs on the host.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"number": {
"type": "number"
}
},
"required": [
"owner",
"repo",
"number"
]
}🟡gluecron_create_agent_session(name, repository_id, branch_namespace, budget_cents_per_day)
Mint a new agent-multiplayer session. Returns the plaintext `token` exactly once (store it). Requires 'admin' scope.
Eingabe-Schema
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Human-readable session name (unique per owner)"
},
"repository_id": {
"type": "string",
"description": "Optional repo to scope to"
},
"branch_namespace": {
"type": "string",
"description": "Optional branch namespace override"
},
"budget_cents_per_day": {
"type": "number",
"description": "Daily budget cap in cents (default 500)"
}
},
"required": [
"name"
]
}⚪gluecron_acquire_lease(agent_session_id, target_type, target_id, duration_ms)
Grab an exclusive lease on a target (e.g. a PR or branch) for an agent session. Returns null when another agent holds an active lease.
Eingabe-Schema
{
"type": "object",
"properties": {
"agent_session_id": {
"type": "string"
},
"target_type": {
"type": "string",
"description": "e.g. 'pull_request', 'branch'"
},
"target_id": {
"type": "string"
},
"duration_ms": {
"type": "number",
"description": "Lease duration (default 5 minutes)"
}
},
"required": [
"agent_session_id",
"target_type",
"target_id"
]
}⚪gluecron_release_lease(lease_id)
Release a lease by id. Idempotent. Returns {released}.
Eingabe-Schema
{
"type": "object",
"properties": {
"lease_id": {
"type": "string"
}
},
"required": [
"lease_id"
]
}🟢gluecron_get_agent_budget(agent_session_id)
Return spent / cap / remaining cents for an agent session.
Eingabe-Schema
{
"type": "object",
"properties": {
"agent_session_id": {
"type": "string"
}
},
"required": [
"agent_session_id"
]
}🟢gluecron_semantic_search(owner, repo, query, limit)
Query the per-repo vector index (Voyage embeddings when configured, hash fallback otherwise). Reads the live per-push index (code_embeddings) first, falling back to the manually-reindexed 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.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"query": {
"type": "string"
},
"limit": {
"type": "number"
}
},
"required": [
"owner",
"repo",
"query"
]
}🟢gluecron_find_symbol(owner, repo, name)
Find definitions of a symbol by name within a repo. Wraps src/lib/symbols.findDefinitions.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"name": {
"type": "string",
"description": "Symbol name"
}
},
"required": [
"owner",
"repo",
"name"
]
}🟢gluecron_pr_status_summary(owner, repo, number)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"number": {
"type": "number"
}
},
"required": [
"owner",
"repo",
"number"
]
}🟢gluecron_ai_cost_summary(scope, owner, repo, agent_session_id)
Return AI spend rollups. Scope by one of: user_id (self), repo {owner,repo}, or agent_session_id. Defaults to caller's user spend.
Eingabe-Schema
{
"type": "object",
"properties": {
"scope": {
"type": "string",
"description": "'user' (default) | 'repo' | 'agent'"
},
"owner": {
"type": "string"
},
"repo": {
"type": "string"
},
"agent_session_id": {
"type": "string"
}
}
}🟢gluecron_security_scan(owner, repo, ref, include_ai_review, max_candidate_lines)
Everything Gluecron actually knows about a repository's security, in one honest call: OSV.dev CVE/GHSA advisories against the indexed dependency graph (with FIXED VERSIONS), Gluecron's supplemental advisory list, a full-tree committed-secret scan, and optionally a Claude semantic code review. Unlike gluecron_repo_health, an empty result is NEVER reported as a pass: every category returns status 'assessed' | 'partial' | 'not_assessed' | 'error' with a machine-readable reason code, so you can tell 'we checked and it is clean' from 'we never looked'. In particular, a repo whose dependency graph was never indexed returns dependency_advisories.status='not_assessed' (reason 'dependency_graph_not_indexed'), not an empty advisory list. Read-only.
Eingabe-Schema
{
"type": "object",
"properties": {
"owner": {
"type": "string",
"description": "Repo owner username"
},
"repo": {
"type": "string",
"description": "Repo name"
},
"ref": {
"type": "string",
"description": "Branch, tag or commit SHA to scan the tree of. Default: the repo's default branch. Note advisories describe the INDEXED dependency graph, whose commit is reported separately — if it differs from this ref the advisory answer is downgraded to 'partial'."
},
"include_ai_review": {
"type": "boolean",
"description": "Opt in to the Claude Sonnet semantic review (SQLi/XSS/SSRF/authz/crypto). Costs an Anthropic call and adds seconds. Default false. When it cannot run — no key, provider error, unparseable output — the category reports 'not_assessed', never a pass."
},
"max_candidate_lines": {
"type": "number",
"description": "Cap on lines the secret detector inspects (1-200000, default 20000). The whole tree is always prefiltered; only lines that already matched a secret marker are inspected, so this rarely binds. When it does, committed_secrets reports 'partial' with the exact fraction."
}
},
"required": [
"owner",
"repo"
]
}Community
Nachweis