Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,542Letters: 14Defects: 1,324counted 4 min ago
teppi

Server definition

Hash
sha256:1eedccaecb6a77f63c4a3f3b4908b4c0c4d61bf0bec2c07b35b58bb2248708bd
What it is
What a remote MCP server returned when asked what it offers: 65 tools

The blob, as servednamed by its sha256

{ "instructions": null, "tools": [ { "description": "Grab an exclusive lease on a PR, issue, branch or file path in a repository you can write, for one of your agent sessions. Pass owner+repo with a bare key (PR/issue number, branch name, path), or target_id '<repository id>:<key>'. Returns lease null when another agent holds an active lease.", "inputSchema": { "properties": { "agent_session_id": { "type": "string" }, "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": "'issue' | 'pr' | 'branch' | 'file_path'", "type": "string" } }, "required": [ "agent_session_id", "target_type", "target_id" ], "type": "object" }, "name": "gluecron_acquire_lease", "outputSchema": null }, { "description": "Return AI spend rollups. Scope by one of: user_id (self), repo {owner,repo}, or agent_session_id. Defaults to caller's user spend.", "inputSchema": { "properties": { "agent_session_id": { "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "scope": { "description": "'user' (default) | 'repo' | 'agent'", "type": "string" } }, "type": "object" }, "name": "gluecron_ai_cost_summary", "outputSchema": null }, { "description": "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 git push, and fires CI/webhooks like one. Patch limit 2 MiB. Requires 'repo' scope. Returns {branch, commit_sha, parent_sha, files_changed, files, commits, created}.", "inputSchema": { "properties": { "base_branch": { "description": "Branch to fork from when `branch` does not exist yet (default: the repo's default branch).", "type": "string" }, "branch": { "description": "Target branch (short name). Created if it does not exist.", "type": "string" }, "expected_head_sha": { "description": "Optional compare-and-swap: the 40-hex sha you expect `branch` to point at. Refused if it moved. All zeros = the branch must not exist.", "type": "string" }, "message": { "description": "Commit message. Required for a unified diff; ignored for mbox input (each patch carries its own).", "type": "string" }, "owner": { "type": "string" }, "patch": { "description": "Unified diff (`git diff`, a/ b/ prefixes) or `git format-patch` mbox text. Max 2 MiB.", "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "branch", "patch" ], "type": "object" }, "name": "gluecron_apply_patch", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "assignee": { "description": "Username to assign", "type": "string" }, "number": { "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "number", "assignee" ], "type": "object" }, "name": "gluecron_assign_issue", "outputSchema": null }, { "description": "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?}`. Meets the same branch protection, rulesets and secret scan as a git push, and fires CI/webhooks like one. Requires 'repo' scope.", "inputSchema": { "properties": { "base_branch": { "description": "Branch to fork from when `branch` doesn't yet exist (default: repo default).", "type": "string" }, "branch": { "type": "string" }, "changes": { "description": "Array of {path, content?|content_base64?, deleted?} entries.", "type": "array" }, "message": { "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "branch", "message", "changes" ], "type": "object" }, "name": "gluecron_atomic_multi_file_commit", "outputSchema": null }, { "description": "Cancel a queued/running workflow run. Requires 'repo' scope.", "inputSchema": { "properties": { "owner": { "type": "string" }, "repo": { "type": "string" }, "run_id": { "description": "The run's id, or a unique leading part of it (8+ hex characters)", "type": "string" } }, "required": [ "owner", "repo", "run_id" ], "type": "object" }, "name": "gluecron_cancel_workflow_run", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "chat_id": { "type": "string" }, "message": { "type": "string" } }, "required": [ "chat_id", "message" ], "type": "object" }, "name": "gluecron_chat_continue", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "message": { "description": "Initial user message", "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "title": { "description": "Chat title (optional)", "type": "string" } }, "required": [ "owner", "repo", "message" ], "type": "object" }, "name": "gluecron_chat_with_repo", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "owner": { "description": "Repo owner username", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_clone_url", "outputSchema": null }, { "description": "Close an open issue. Requires authenticated caller with write access. Idempotent — closing an already-closed issue is a no-op. Returns {state}.", "inputSchema": { "properties": { "number": { "description": "Issue number", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_close_issue", "outputSchema": null }, { "description": "Close an open pull request without merging. Requires authenticated caller with write access. Idempotent. Returns {state}.", "inputSchema": { "properties": { "number": { "description": "PR number", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_close_pr", "outputSchema": null }, { "description": "Add a comment to an existing issue. Requires authenticated caller with write access. Returns {commentId}.", "inputSchema": { "properties": { "body": { "description": "Comment body (Markdown)", "type": "string" }, "number": { "description": "Issue number", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "number", "body" ], "type": "object" }, "name": "gluecron_comment_issue", "outputSchema": null }, { "description": "Add a comment to a pull request. Requires authenticated caller with write access. Returns {commentId}.", "inputSchema": { "properties": { "body": { "description": "Comment body (Markdown)", "type": "string" }, "number": { "description": "PR number", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "number", "body" ], "type": "object" }, "name": "gluecron_comment_pr", "outputSchema": null }, { "description": "Mint a new agent-multiplayer session. Returns the plaintext `token` exactly once (store it). Requires 'admin' scope.", "inputSchema": { "properties": { "branch_namespace": { "description": "Optional branch namespace override", "type": "string" }, "budget_cents_per_day": { "description": "Daily budget cap in cents (default 500)", "type": "number" }, "name": { "description": "Human-readable session name (unique per owner)", "type": "string" }, "repository_id": { "description": "Optional id of a repository you can write, to scope the session to", "type": "string" } }, "required": [ "name" ], "type": "object" }, "name": "gluecron_create_agent_session", "outputSchema": null }, { "description": "Create a new branch ref 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}.", "inputSchema": { "properties": { "branch": { "description": "New branch name (short form)", "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "sha": { "description": "Target commit sha (40-hex)", "type": "string" } }, "required": [ "owner", "repo", "branch", "sha" ], "type": "object" }, "name": "gluecron_create_branch", "outputSchema": null }, { "description": "Create a new issue on a Gluecron repository. Requires authenticated caller with write access on the target repo. Returns {number, url}.", "inputSchema": { "properties": { "body": { "description": "Issue body (Markdown). Optional.", "type": "string" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" }, "title": { "description": "Issue title", "type": "string" } }, "required": [ "owner", "repo", "title" ], "type": "object" }, "name": "gluecron_create_issue", "outputSchema": null }, { "description": "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}.", "inputSchema": { "properties": { "base_branch": { "description": "Target branch (default: repo default branch)", "type": "string" }, "body": { "description": "PR body (Markdown). Optional.", "type": "string" }, "head_branch": { "description": "Branch with the changes", "type": "string" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" }, "title": { "description": "PR title", "type": "string" } }, "required": [ "owner", "repo", "title", "head_branch" ], "type": "object" }, "name": "gluecron_create_pr", "outputSchema": null }, { "description": "Delete a file from a branch via git plumbing. Requires the existing 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.", "inputSchema": { "properties": { "branch": { "type": "string" }, "message": { "type": "string" }, "owner": { "type": "string" }, "path": { "type": "string" }, "repo": { "type": "string" }, "sha": { "description": "Current blob sha (40-hex)", "type": "string" } }, "required": [ "owner", "repo", "path", "branch", "message", "sha" ], "type": "object" }, "name": "gluecron_delete_file", "outputSchema": null }, { "description": "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}.", "inputSchema": { "properties": { "owner": { "description": "Repo owner username", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_delete_repo", "outputSchema": null }, { "description": "Return the cached AI 'explain this codebase' Markdown for a repo. Pure read — never triggers a new generation (use the web UI for that).", "inputSchema": { "properties": { "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_explain_repo", "outputSchema": null }, { "description": "Find definitions of a symbol by name within a repo. Wraps src/lib/symbols.findDefinitions.", "inputSchema": { "properties": { "name": { "description": "Symbol name", "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "name" ], "type": "object" }, "name": "gluecron_find_symbol", "outputSchema": null }, { "description": "Fork a repository to the authenticated caller's namespace. Mirrors POST /:owner/:repo/fork. Returns {owner, repo, url}. Requires 'repo' scope.", "inputSchema": { "properties": { "owner": { "description": "Source repo owner", "type": "string" }, "repo": { "description": "Source repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_fork_repo", "outputSchema": null }, { "description": "Generate a commit message for a diff. Same engine as gluecron_generate_pr_description but explicit for the commit-message use case.", "inputSchema": { "properties": { "diff": { "type": "string" }, "style": { "description": "'conventional' (default) or 'plain'", "type": "string" } }, "required": [ "diff" ], "type": "object" }, "name": "gluecron_generate_commit_message", "outputSchema": null }, { "description": "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}.", "inputSchema": { "properties": { "diff": { "description": "Unified-diff body", "type": "string" }, "style": { "description": "'conventional' (default) or 'plain'", "type": "string" } }, "required": [ "diff" ], "type": "object" }, "name": "gluecron_generate_pr_description", "outputSchema": null }, { "description": "Generate release notes between two tags. Wraps src/lib/ai-release-notes.generateReleaseNotes. Returns the rendered Markdown + section data.", "inputSchema": { "properties": { "from_tag": { "description": "Previous tag (optional)", "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "to_tag": { "description": "New tag", "type": "string" } }, "required": [ "owner", "repo", "to_tag" ], "type": "object" }, "name": "gluecron_generate_release_notes", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "mode": { "description": "'follow-up-pr' or 'append-commit'", "type": "string" }, "number": { "description": "PR number", "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_generate_tests", "outputSchema": null }, { "description": "Return spent / cap / remaining cents for an agent session.", "inputSchema": { "properties": { "agent_session_id": { "type": "string" } }, "required": [ "agent_session_id" ], "type": "object" }, "name": "gluecron_get_agent_budget", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "include_files": { "description": "Include the files-changed summary and stats (default true). Set false to skip the diff read on very large commits.", "type": "boolean" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "sha": { "description": "Commit SHA", "type": "string" } }, "required": [ "owner", "repo", "sha" ], "type": "object" }, "name": "gluecron_get_commit", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "base": { "description": "Base ref (with `head`)", "type": "string" }, "head": { "description": "Head ref (with `base`)", "type": "string" }, "include_patch": { "description": "Include patch bodies (default true)", "type": "boolean" }, "max_patch_bytes": { "description": "Total budget for patch text across all files (default 400000, max 2000000)", "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "sha": { "description": "Commit SHA — diffs it against its first parent", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_get_diff", "outputSchema": null }, { "description": "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).", "inputSchema": { "properties": { "number": { "description": "PR number", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_get_pr", "outputSchema": null }, { "description": "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).", "inputSchema": { "properties": { "branch": { "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "branch" ], "type": "object" }, "name": "gluecron_get_preview_url", "outputSchema": null }, { "description": "Return concatenated per-job logs for a workflow run, plus per-job metadata. JSON-friendly companion to the ZIP-download endpoint.", "inputSchema": { "properties": { "owner": { "type": "string" }, "repo": { "type": "string" }, "run_id": { "description": "The run's id, or a unique leading part of it (8+ hex characters)", "type": "string" } }, "required": [ "owner", "repo", "run_id" ], "type": "object" }, "name": "gluecron_get_workflow_logs", "outputSchema": null }, { "description": "Fetch a workflow run's metadata + status. Mirrors GET /api/v2/repos/.../actions/runs/:id.", "inputSchema": { "properties": { "owner": { "type": "string" }, "repo": { "type": "string" }, "run_id": { "description": "The run's id, or a unique leading part of it (8+ hex characters)", "type": "string" } }, "required": [ "owner", "repo", "run_id" ], "type": "object" }, "name": "gluecron_get_workflow_run", "outputSchema": null }, { "description": "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}.", "inputSchema": { "properties": { "labels": { "description": "Label names (strings)", "type": "array" }, "number": { "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "number", "labels" ], "type": "object" }, "name": "gluecron_label_issue", "outputSchema": null }, { "description": "List pull requests on a repo, filtered by state (open|closed|merged|all). Authenticated callers only. Returns up to 50 summary rows.", "inputSchema": { "properties": { "limit": { "description": "Max rows per page (default 50, max 100)", "type": "number" }, "offset": { "description": "Rows to skip, for paging. Use `nextOffset` from the previous response.", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" }, "state": { "description": "open | closed | merged | all (default: open)", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_list_prs", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "owner": { "type": "string" }, "path": { "description": "Sub-path within the repo", "type": "string" }, "recursive": { "type": "boolean" }, "ref": { "description": "Branch / tag / sha. Omit (or pass HEAD) for the default branch.", "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_list_tree", "outputSchema": null }, { "description": "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?}.", "inputSchema": { "properties": { "confirm_high_risk": { "description": "When true, bypass the M3 risk-score soft-block on critical-band PRs.", "type": "boolean" }, "number": { "description": "PR number", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_merge_pr", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "base_branch": { "type": "string" }, "body": { "type": "string" }, "head_branch": { "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "title": { "type": "string" } }, "required": [ "owner", "repo", "title", "head_branch" ], "type": "object" }, "name": "gluecron_open_draft_pr", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "number": { "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_pr_status_summary", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_propose_doc_update", "outputSchema": null }, { "description": "Propose a dependency-upgrade PR. Wraps src/lib/migration-assistant.proposeMajorMigration. Requires 'repo' scope.", "inputSchema": { "properties": { "base_sha": { "description": "Commit sha to fork from", "type": "string" }, "changelog": { "description": "Optional changelog text", "type": "string" }, "dependency": { "type": "string" }, "from_version": { "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "to_version": { "type": "string" } }, "required": [ "owner", "repo", "dependency", "from_version", "to_version", "base_sha" ], "type": "object" }, "name": "gluecron_propose_migration", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "number": { "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_provision_pr_sandbox", "outputSchema": null }, { "description": "Read a file from a repo at a given ref. Mirrors GET /api/v2/repos/:owner/:repo/contents/:path. Returns {path, size, content, encoding}.", "inputSchema": { "properties": { "encoding": { "description": "'utf8' (default) or 'base64'", "type": "string" }, "owner": { "type": "string" }, "path": { "type": "string" }, "ref": { "description": "Branch / tag / sha (default HEAD)", "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "path" ], "type": "object" }, "name": "gluecron_read_file", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "description": { "description": "Natural-language description", "type": "string" }, "dry_run": { "description": "When true, returns the plan and does NOT execute.", "type": "boolean" }, "repository_ids": { "description": "Optional explicit repo IDs to scope the refactor to.", "type": "array" } }, "required": [ "description" ], "type": "object" }, "name": "gluecron_refactor_across_repos", "outputSchema": null }, { "description": "Release a lease by id. Idempotent. Returns {released}.", "inputSchema": { "properties": { "lease_id": { "type": "string" } }, "required": [ "lease_id" ], "type": "object" }, "name": "gluecron_release_lease", "outputSchema": null }, { "description": "Reopen a previously closed issue. Requires authenticated caller with write access. Idempotent. Returns {state}.", "inputSchema": { "properties": { "number": { "description": "Issue number", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "number" ], "type": "object" }, "name": "gluecron_reopen_issue", "outputSchema": null }, { "description": "Return the cached AI 'explain this codebase' Markdown for a public repo (most recent commit). Returns null when no cached explanation exists yet.", "inputSchema": { "properties": { "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_repo_explain_codebase", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_repo_health", "outputSchema": null }, { "description": "List open issues for a public repository. Returns up to 50 ordered by most-recent.", "inputSchema": { "properties": { "limit": { "description": "Max rows per page (default 25, max 50)", "type": "number" }, "offset": { "description": "Rows to skip, for paging. Use `nextOffset` from the previous response.", "type": "number" }, "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_repo_list_issues", "outputSchema": null }, { "description": "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).", "inputSchema": { "properties": { "owner": { "description": "Repo owner — username or organisation slug", "type": "string" }, "path": { "description": "File path within the repo", "type": "string" }, "ref": { "description": "Branch / tag / commit. Defaults to the repository's actual default branch (which may not be 'main' — e.g. 'Main').", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo", "path" ], "type": "object" }, "name": "gluecron_repo_read_file", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "limit": { "description": "Max rows per page (default 20, max 50)", "type": "number" }, "offset": { "description": "Rows to skip. Use `nextOffset` from the previous response.", "type": "number" }, "query": { "description": "Search keyword (1-100 chars)", "type": "string" } }, "required": [ "query" ], "type": "object" }, "name": "gluecron_repo_search", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "body": { "description": "Review body (Markdown)", "type": "string" }, "number": { "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "number", "body" ], "type": "object" }, "name": "gluecron_request_changes", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "limit": { "description": "Max matches (default 50, max 200)", "type": "number" }, "owner": { "type": "string" }, "query": { "description": "Pattern (git grep basic regex)", "type": "string" }, "ref": { "description": "Branch / tag / sha (default: the repo's default branch)", "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "query" ], "type": "object" }, "name": "gluecron_search_code", "outputSchema": null }, { "description": "Search issues by title/body keyword on a single repo, filtered by state. Returns ranked rows.", "inputSchema": { "properties": { "limit": { "type": "number" }, "owner": { "type": "string" }, "query": { "description": "Search keyword", "type": "string" }, "repo": { "type": "string" }, "state": { "description": "open | closed | all (default open)", "type": "string" } }, "required": [ "owner", "repo", "query" ], "type": "object" }, "name": "gluecron_search_issues", "outputSchema": null }, { "description": "Search pull requests by title/body keyword on a repo.", "inputSchema": { "properties": { "limit": { "type": "number" }, "owner": { "type": "string" }, "query": { "type": "string" }, "repo": { "type": "string" }, "state": { "description": "open|closed|merged|all (default open)", "type": "string" } }, "required": [ "owner", "repo", "query" ], "type": "object" }, "name": "gluecron_search_prs", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "limit": { "description": "Max rows per page (default 30, max 100)", "type": "number" }, "offset": { "description": "Rows to skip. Use `nextOffset` from the previous response.", "type": "number" }, "query": { "description": "Search keyword — matches owner login, repo name, owner/name and description. Omit to list your own repositories.", "type": "string" }, "sort": { "description": "stars | updated | name (default: stars)", "type": "string" } }, "type": "object" }, "name": "gluecron_search_repos", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "include_ai_review": { "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.", "type": "boolean" }, "max_candidate_lines": { "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.", "type": "number" }, "owner": { "description": "Repo owner username", "type": "string" }, "ref": { "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'.", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_security_scan", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "limit": { "type": "number" }, "owner": { "type": "string" }, "query": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "query" ], "type": "object" }, "name": "gluecron_semantic_search", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "body": { "description": "Spec body (Markdown)", "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "title": { "type": "string" } }, "required": [ "owner", "repo", "title", "body" ], "type": "object" }, "name": "gluecron_ship_spec", "outputSchema": null }, { "description": "Dispatch a workflow_dispatch run. Mirrors POST /api/v2/repos/.../actions/workflows/:filename/dispatches. Requires 'repo' scope.", "inputSchema": { "properties": { "filename": { "description": "Workflow filename (e.g. ci.yml)", "type": "string" }, "inputs": { "description": "Workflow inputs (object)", "type": "object" }, "owner": { "type": "string" }, "ref": { "description": "Branch / tag / sha (default: repo default branch)", "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "filename" ], "type": "object" }, "name": "gluecron_trigger_workflow", "outputSchema": null }, { "description": "Detach a label from an issue. Idempotent. Requires 'repo' scope. Returns {removed: boolean}.", "inputSchema": { "properties": { "label": { "type": "string" }, "number": { "type": "number" }, "owner": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "number", "label" ], "type": "object" }, "name": "gluecron_unlabel_issue", "outputSchema": null }, { "description": "Update repository description / visibility / default_branch. Requires 'admin' access on the repo (owner, org owners/admins, admin collaborators) and 'repo' scope. Returns {ok: true}.", "inputSchema": { "properties": { "automation": { "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.", "type": "object" }, "default_branch": { "description": "Set default branch (optional)", "type": "string" }, "description": { "description": "New description (optional)", "type": "string" }, "is_private": { "description": "Set visibility (optional)", "type": "boolean" }, "owner": { "description": "Repo owner username", "type": "string" }, "repo": { "description": "Repo name", "type": "string" } }, "required": [ "owner", "repo" ], "type": "object" }, "name": "gluecron_update_repo", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": { "as": { "description": "'spec' or 'issue' (default: auto via interpretVoiceTranscript)", "type": "string" }, "owner": { "type": "string" }, "repo": { "type": "string" }, "transcript": { "type": "string" } }, "required": [ "owner", "repo", "transcript" ], "type": "object" }, "name": "gluecron_voice_to_pr", "outputSchema": null }, { "description": "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.", "inputSchema": { "properties": {}, "type": "object" }, "name": "gluecron_whoami", "outputSchema": null }, { "description": "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. Meets the same branch protection, rulesets and secret scan as a git push, and fires CI/webhooks like one. Requires 'repo' scope.", "inputSchema": { "properties": { "branch": { "type": "string" }, "content": { "description": "UTF-8 file body (optional)", "type": "string" }, "content_base64": { "description": "Base64 file body (optional)", "type": "string" }, "expect_blob_sha": { "description": "Optimistic-concurrency check: existing blob sha must match.", "type": "string" }, "message": { "description": "Commit message", "type": "string" }, "owner": { "type": "string" }, "path": { "type": "string" }, "repo": { "type": "string" } }, "required": [ "owner", "repo", "path", "branch", "message" ], "type": "object" }, "name": "gluecron_write_file", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:1eedccaecb6a77f63c4a3f3b4908b4c0c4d61bf0bec2c07b35b58bb2248708bd | sha256sum