Each tool is implemented with a durable "use step" boundary, so calls are proper workflow steps (retries, observability, full Node) when you run inside the Vercel Workflow SDK. For a full agent loop that is also durable, use createDurableGithubAgent from @github-tools/sdk/workflow. For eve agents, mount @github-tools/eve-extension (the deprecated createGithubTools from @github-tools/sdk/eve also still works).
Cherry-pick GitHub tool factories
Repository tools
Available in all presets. These tools manage repositories, branches, and file content:
| Tool | Capability | Write |
|---|---|---|
getRepository | read repository metadata (name, description, stars, language) | No |
listBranches | list branches and their HEAD commits | No |
getFileContent | read a file at a path/ref; prefer startLine/endLine or maxLines for large files | No |
getRepositoryTree | list the file and directory structure at a given ref (prefer a path prefix over recursive: true) | No |
createBranch | create a new branch from an existing branch or commit SHA | Yes |
deleteBranch | permanently delete a branch | Yes |
forkRepository | fork a repository to your account or an organization | Yes |
createRepository | create a new repository for the authenticated user or an organization | Yes |
createOrUpdateFile | create or update a file in the repository | Yes |
Pull request tools
Available in code-review and maintainer presets:
| Tool | Capability | Write |
|---|---|---|
listPullRequests | list pull requests filtered by state | No |
getPullRequest | read PR details including diff stats (body truncated by default; set detail: full for complete text) | No |
listPullRequestFiles | list files changed in a PR (patches omitted by default; set includePatch / filenames for diffs) | No |
listPullRequestReviews | list reviews on a PR (approvals, change requests, comments) | No |
listPullRequestReviewThreads | list review threads with comments, resolution state, and reply/resolve IDs (unresolved only by default) | No |
getPullRequestContext | fetch PR details plus files, reviews, and optional CI checks in one call | No |
createPullRequest | open a new pull request | Yes |
mergePullRequest | merge a pull request | Yes |
updatePullRequest | update a pull request's title, body, state, base branch, or draft status | Yes |
addPullRequestComment | post a comment on a pull request | Yes |
updatePullRequestComment | edit the body of a pull request comment | Yes |
deletePullRequestComment | permanently delete a pull request comment | Yes |
createPullRequestReview | submit a formal review (approve, request changes, or comment) with inline comments | Yes |
replyToReviewComment | reply to a review comment in its thread | Yes |
resolveReviewThread | mark a review thread as resolved | Yes |
requestReviewers | request reviews from users or teams on a pull request | Yes |
Issue tools
Available in issue-triage and maintainer presets:
| Tool | Capability | Write |
|---|---|---|
listIssues | list issues filtered by state and labels | No |
getIssue | read issue details (body truncated by default; set detail: full for complete text) | No |
getIssueContext | fetch an issue plus label names and recent comments in one call | No |
listIssueComments | list comments on an issue (paginated; prefer getIssueContext first) | No |
createIssue | create a new issue | Yes |
addIssueComment | post a comment on an issue | Yes |
updateIssueComment | edit the body of an issue comment | Yes |
deleteIssueComment | permanently delete an issue comment | Yes |
closeIssue | close an issue thread | Yes |
updateIssue | update an issue's title, body, labels, milestone, or assignees — set state: 'open' to reopen | Yes |
listLabels | list labels available in a repository | No |
addLabels | add labels to an issue or pull request | Yes |
removeLabel | remove a label from an issue or pull request | Yes |
createLabel | create a label in a repository | Yes |
updateLabel | update a label's name, color, or description | Yes |
deleteLabel | delete a label from a repository permanently | Yes |
addAssignees | assign users to an issue or pull request | Yes |
removeAssignees | remove assignees from an issue or pull request | Yes |
Reaction tools
Available in issue-triage and maintainer presets. Pull request conversations share the issue numbering, so listIssueReactions and addIssueReaction work on PRs too:
| Tool | Capability | Write |
|---|---|---|
listIssueReactions | list reactions on an issue or pull request, with per-emoji counts | No |
addIssueReaction | react to an issue or pull request (+1, -1, laugh, confused, heart, hooray, rocket, eyes) | Yes |
listCommentReactions | list reactions on an issue or pull request comment | No |
addCommentReaction | react to an issue or pull request comment | Yes |
Reactions acknowledge a report without adding a comment to the thread. They're covered by the Issues permission, so no extra token scope is needed.
Discussion tools
Available in repo-explorer (read-only) and maintainer presets. These use the GitHub GraphQL API:
| Tool | Capability | Write |
|---|---|---|
listDiscussions | list discussions, most recently updated first, optionally filtered by category name | No |
getDiscussion | read a discussion by number (body truncated by default; set detail: full for complete text) | No |
addDiscussionComment | post a comment on a discussion | Yes |
listDiscussions paginates by cursor: pass the endCursor it returns as after to fetch the next page.
Notification tools
Available in the maintainer preset:
| Tool | Capability | Write |
|---|---|---|
listNotifications | list notification threads for the authenticated user (unread only unless all: true) | No |
markNotificationRead | mark a single notification thread as read | Yes |
Notifications belong to a user, not a repository. They need a PAT with the Notifications account permission and do not work with a Vercel Connect installation token — see Tokens and Authentication.
Gist tools
Available in repo-explorer (read-only) and maintainer presets:
| Tool | Capability | Write |
|---|---|---|
listGists | list gists for the authenticated user or a specific user | No |
getGist | read a gist including file contents | No |
listGistComments | list comments on a gist | No |
createGist | create a new gist with one or more files | Yes |
updateGist | update gist description, files, or remove files | Yes |
deleteGist | permanently delete a gist | Yes |
createGistComment | post a comment on a gist | Yes |
Workflow tools
Available in repo-explorer (read-only), ci-ops, and maintainer presets:
| Tool | Capability | Write |
|---|---|---|
listWorkflows | list GitHub Actions workflows in a repository | No |
listWorkflowRuns | list workflow runs filtered by workflow, branch, status, or event | No |
getWorkflowRun | read a workflow run's status, timing, and trigger info | No |
listWorkflowJobs | list jobs in a workflow run with step-level status | No |
getWorkflowJobLogs | read a job's log output (last 200 lines by default, timestamps stripped; raise maxLines for more) | No |
triggerWorkflow | trigger a workflow via workflow_dispatch event | Yes |
cancelWorkflowRun | cancel an in-progress workflow run | Yes |
rerunWorkflowRun | re-run a workflow run, optionally only failed jobs | Yes |
Checks and statuses tools
Available in repo-explorer, code-review, ci-ops, security-audit, and maintainer presets:
| Tool | Capability | Write |
|---|---|---|
listCheckRuns | list check runs (Checks API: GitHub Actions and other CI providers) for a commit, branch, or tag | No |
getCombinedStatus | get the combined commit status (Statuses API: legacy CI integrations) for a commit, branch, or tag | No |
getCiFailureContext | diagnose CI failures for a ref — combined status, failing checks, and failed workflow jobs in one call | No |
Release tools
Available in repo-explorer, release-manager, and maintainer presets:
| Tool | Capability | Write |
|---|---|---|
listReleases | list releases for a repository, newest first (includes drafts and prereleases) | No |
getLatestRelease | get the latest published release (body truncated by default; set detail: full for complete notes) | No |
getRelease | get a specific release by ID, including its assets | No |
getReleaseContext | fetch a release plus the previous release and tag comparison in one call | No |
createRelease | create a new release (and its tag if needed) | Yes |
updateRelease | update a release's tag, target, title, notes, draft, or prerelease status | Yes |
deleteRelease | permanently delete a release (does not delete the underlying git tag) | Yes |
Search and commit tools
Available in all presets:
| Tool | Capability | Write |
|---|---|---|
listCommits | list commit history (filter with path / author / since / until; when hasMore, pass nextPage) | No |
getCommit | read a single commit with file stats (patches omitted by default; set includePatch for diffs) | No |
getBlame | line-level git blame for a file (GraphQL) | No |
compareCommits | compare two branches, tags, or commits: ahead/behind counts, commits in between, and files that differ (patches omitted by default) | No |
searchCode | search code across repository files, with matching text snippets when GitHub returns them | No |
searchRepositories | search repositories by query | No |
searchIssues | search issues and pull requests using qualifiers like is:open or type:pr | No |
Paged list results
REST list tools return { items, hasMore, page, perPage, nextPage? } — or add those paging fields next to existing keys (checkRuns, runs, workflows, jobs). When hasMore is true, call again with nextPage (not the same page), or set maxPages to combine sequential pages in one call. Filter listCommits with path / author / since / until instead of walking the full history. getRepositoryTree accepts a path prefix; prefer that over recursive: true.
Identify write operations
All tools marked Write can be gated with requireApproval. In production, always pair them with:
- a scoped preset to limit which writes are available
- a fine-grained token to limit what the token can do
- an explicit approval policy to intercept mutations before execution