# MCP tool reference

The Codebahn MCP server exposes 102 tools across 9 groups. Each tool's name matches what your AI assistant calls directly.

## User

### get_my_user_info

Get current user info

No parameters.

## Repo

### create_repo

Create repo

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `name` | string | Yes |  | Repo name |
| `description` | string | No |  | Description |
| `owner` | string | No |  | Owner/org name |
| `private` | boolean | No |  | Private repo |
| `issue_labels` | string | No |  | Issue label set |
| `auto_init` | boolean | No |  | Auto-initialize |
| `template` | boolean | No |  | Template repo |
| `gitignores` | string | No |  | Gitignore templates |
| `license` | string | No |  | License |
| `readme` | string | No |  | README content |
| `default_branch` | string | No |  | Default branch |

### list_my_repos

List my repos

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `100` | Page size |

### update_repo

Update repository settings (common subset): name, description, website, default_branch, private, archived, has_issues, has_pull_requests, has_releases, has_packages, has_actions, allow_merge_commits, allow_rebase, allow_squash_merge, default_merge_style, default_delete_branch_after_merge. All fields optional; omitted fields are left unchanged. Accepts the full Forgejo EditRepoOption surface beyond the common subset.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `name` | string | No |  | New repository name |
| `description` | string | No |  | Description |
| `website` | string | No |  | Website URL |
| `default_branch` | string | No |  | Default branch |
| `default_merge_style` | string | No |  | Default merge style (merge, rebase, rebase-merge, squash, fast-forward-only) |
| `mirror_interval` | string | No |  | Mirror sync interval (e.g. 8h, 0 to disable) |
| `external_tracker_url` | string | No |  | External issue tracker URL |
| `external_tracker_format` | string | No |  | External issue tracker URL format |
| `external_tracker_style` | string | No |  | External issue tracker numbering style |
| `external_tracker_regexp_pattern` | string | No |  | External issue tracker regexp pattern |
| `external_wiki_url` | string | No |  | External wiki URL |
| `private` | boolean | No |  | Private repo |
| `template` | boolean | No |  | Template repo |
| `archived` | boolean | No |  | Archived (read-only) |
| `has_issues` | boolean | No |  | Enable issue tracker |
| `has_wiki` | boolean | No |  | Enable wiki |
| `has_pull_requests` | boolean | No |  | Enable pull requests |
| `has_projects` | boolean | No |  | Enable projects |
| `has_releases` | boolean | No |  | Enable releases |
| `has_packages` | boolean | No |  | Enable package registry |
| `has_actions` | boolean | No |  | Enable Actions CI |
| `ignore_whitespace_conflicts` | boolean | No |  | Ignore whitespace-only conflicts when merging |
| `allow_merge_commits` | boolean | No |  | Allow merge commits |
| `allow_rebase` | boolean | No |  | Allow rebase merging |
| `allow_rebase_explicit` | boolean | No |  | Allow rebase with explicit merge commit |
| `allow_rebase_update` | boolean | No |  | Allow rebase of PR head branch when behind base |
| `allow_squash_merge` | boolean | No |  | Allow squash merging |
| `allow_fast_forward_only_merge` | boolean | No |  | Allow fast-forward-only merging |
| `default_delete_branch_after_merge` | boolean | No |  | Delete head branch by default after merge |
| `default_allow_maintainer_edit` | boolean | No |  | Allow maintainer edits on PRs by default |
| `enable_prune` | boolean | No |  | Enable automatic pruning of obsolete mirror branches |

### get_file_content

Get file content as plain text by default. Set with_metadata=true for binary files, or when you need the SHA/encoding/links from the full ContentsResponse (e.g. before a follow-up update_file call). Optional start_line and end_line request a 1-indexed inclusive line range; out-of-range values clamp to the file extent. Range parameters are ignored when with_metadata=true.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `ref` | string | Yes |  | Ref (branch/tag/commit) |
| `filePath` | string | Yes |  | File path |
| `with_metadata` | boolean | No |  | Return the full ContentsResponse (sha, encoding, links, type, size, base64 content) instead of plain text. |
| `start_line` | number | No |  | Optional 1-indexed first line of the slice (inclusive). Defaults to 1 when only end_line is set. |
| `end_line` | number | No |  | Optional 1-indexed last line of the slice (inclusive). Defaults to the file's last line when only start_line is set. |

### create_file

Create file

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `filePath` | string | Yes |  | File path |
| `content` | string | Yes |  | Content (plain text, base64-encoded automatically) |
| `message` | string | Yes |  | Commit message |
| `branch_name` | string | Yes |  | Branch name |
| `new_branch_name` | string | No |  | New branch name |

### update_file

Update file

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `filePath` | string | Yes |  | File path |
| `content` | string | Yes |  | Content (plain text, base64-encoded automatically) |
| `message` | string | Yes |  | Commit message |
| `branch_name` | string | Yes |  | Branch name |
| `sha` | string | Yes |  | File SHA |
| `new_branch_name` | string | No |  | New branch name |

### delete_file (Destructive)

Delete file

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `filePath` | string | Yes |  | File path |
| `message` | string | Yes |  | Commit message |
| `branch_name` | string | Yes |  | Branch name |
| `sha` | string | Yes |  | File SHA |
| `new_branch_name` | string | No |  | New branch name |

### create_branch

Create branch

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `branch` | string | Yes |  | Branch name |
| `old_branch` | string | Yes |  | Source branch |

### delete_branch (Destructive)

Delete branch

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `branch` | string | Yes |  | Branch name |

### list_branches

List branches

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `100` | Page size |

### list_repo_commits

List commits, newest first, starting from sha (a branch, tag or commit; defaults to the default branch). Set path to a file or directory to get only the commits that touched it: file-scoped history shows who changed a file recently and how often, which tells you how much scrutiny a change there deserves.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `path` | string | No |  | Optional file or directory path. Only commits that touched it are returned. |
| `sha` | string | No |  | Branch, tag or commit SHA to start from (default: the default branch) |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `100` | Page size |

### get_commit_diff

Get the unified diff of a single commit (its changes against its first parent). Pass an optional file_path to receive only the hunks for that file (match is exact on either the pre- or post-rename path). Pair with list_pr_commits to review a pull request commit by commit instead of only its squashed diff.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `sha` | string | Yes |  | Commit SHA (full or abbreviated) |
| `file_path` | string | No |  | Optional. Return only the diff section for this file (matched on the diff --git boundary). Omit for the full diff. |

### compare_refs

Compare two refs (branches, tags or commit SHAs) as base...head: the commits reachable from head but not from base (newest first), and the files those commits touched with their status. No pull request is needed, so use it to preview a PR before it exists, to check what actually landed between two releases or deploys, or to measure how far two branches have diverged. For the hunks themselves use get_commit_diff on the listed commits.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `base` | string | Yes |  | Base ref (branch, tag or commit SHA) |
| `head` | string | Yes |  | Head ref (branch, tag or commit SHA); the result is what head has that base does not |

### list_repo_contents

List the files and directories at a given path in a repository. Use path="" to list the repository root. Returns one level of entries at the specified path; for a full recursive file tree use get_repo_tree with recursive=true.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `ref` | string | Yes |  | Ref (branch/tag/commit) |
| `path` | string | Yes |  | Directory path within the repository (empty string lists the repository root) |

### get_repo_tree

Get the Git tree of a repository. With recursive=true, returns the complete file tree in a single response (subject to the server's tree-endpoint size cap); use this when you need all paths at once. With recursive=false (default), returns only the top-level entries of the tree.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `ref` | string | Yes |  | Ref (branch/tag/commit) |
| `recursive` | boolean | No |  | Return the complete file tree in one response (subject to server cap); default false returns top-level entries only |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `1000` | Page size |

## Issue

### get_issue_by_index

Get issue by index

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | Issue index |

### list_repo_issues

List repo issues

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `state` | string | No | `open` | State (open\|closed\|all) |
| `type` | string | No |  | Type (issues\|pulls) |
| `milestones` | string | No |  | Milestone names/IDs (comma-separated) |
| `labels` | string | No |  | Labels (comma-separated) |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `20` | Page size |

### create_issue

Create issue

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `title` | string | Yes |  | Title |
| `body` | string | No |  | Content body |

### create_issue_comment

Create issue comment

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | Issue/PR index |
| `body` | string | Yes |  | Content body |

### update_issue

Update issue

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | Issue index |
| `title` | string | No |  | Title |
| `body` | string | No |  | Content body |
| `assignee` | string | No |  | Assignee username (convenience for a single user; equivalent to a one-element 'assignees') |
| `assignees` | string | No |  | Assignee usernames (comma-separated). Overrides 'assignee' if both are set. Pass an empty string to clear all assignees. |
| `milestone` | string | No |  | Milestone ID |

### add_issue_labels

Add labels to issue

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | Issue index |
| `labels` | string | Yes |  | Labels to add (comma-separated) |

### remove_issue_labels (Destructive)

Remove labels from issue

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | Issue index |
| `labels` | string | Yes |  | Labels to remove (comma-separated label IDs) |

### issue_state_change

Change issue state

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | Issue index |
| `state` | string | Yes |  | State (open\|closed) |

### list_issue_comments

List issue/PR comments. Returns all comments; the API does not support pagination for this endpoint.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | Issue/PR index |
| `since` | string | No |  | After (RFC 3339) |
| `before` | string | No |  | Before (RFC 3339) |

### get_issue_comment

Get comment by ID

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `comment_id` | number | Yes |  | Comment ID |

### edit_issue_comment

Edit issue/PR comment

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `comment_id` | number | Yes |  | Comment ID |
| `body` | string | Yes |  | Content body |

### delete_issue_comment (Destructive)

Delete issue/PR comment

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `comment_id` | number | Yes |  | Comment ID |

### list_repo_milestones

List repository milestones

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `100` | Page size |
| `state` | string | No | `open` | Milestone state (open\|closed\|all) |

### list_repo_labels

List repository labels. When the owner is an organization and include_org_labels is true (default), org-level labels are merged into the response. Each label carries a scope field of "repo" or "org".

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `100` | Page size |
| `include_org_labels` | boolean | No | `true` | Merge org-level labels into the response when the owner is an organization. Default true. |

### create_label

Create a label on a repository or organization

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner or organization name |
| `name` | string | Yes |  | Label name |
| `color` | string | Yes |  | Label color hex code (e.g. #00aabb) |
| `repo` | string | No |  | Repository name. Omit to create an org-level label. |
| `description` | string | No |  | Label description |
| `exclusive` | boolean | No | `false` | Whether this label is exclusive (only one label with the same scope can be applied) |

### edit_label

Edit a label on a repository or organization

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner or organization name |
| `id` | number | Yes |  | Label ID |
| `repo` | string | No |  | Repository name. Omit to edit an org-level label. |
| `name` | string | No |  | New label name |
| `color` | string | No |  | New label color hex code |
| `description` | string | No |  | New label description |
| `exclusive` | boolean | No |  | Whether this label is exclusive |

### delete_label (Destructive)

Delete a label from a repository or organization

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner or organization name |
| `id` | number | Yes |  | Label ID |
| `repo` | string | No |  | Repository name. Omit to delete an org-level label. |

## PR

### get_pull_request_by_index

Get pull request by index

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |

### list_repo_pull_requests

List repo pull requests

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `state` | string | No | `open` | State (open\|closed\|all) |
| `sort` | string | No |  | Sort (oldest\|recentupdate\|leastupdate\|mostcomment) |
| `milestone` | string | No |  | Milestone ID |
| `labels` | string | No |  | Label IDs |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `20` | Page size |

### create_pull_request

Create pull request

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `head` | string | Yes |  | Head branch |
| `base` | string | Yes |  | Base branch |
| `title` | string | Yes |  | Title |
| `body` | string | No |  | Content body |

### update_pull_request

Update pull request

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `title` | string | No |  | Title |
| `body` | string | No |  | Content body |
| `base` | string | No |  | Base branch |
| `assignee` | string | No |  | Assignee username |
| `milestone` | string | No |  | Milestone ID |

### list_pull_reviews

List reviews for a pull request

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `20` | Page size |

### get_pull_review

Get a specific pull request review

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `id` | number | Yes |  | Review ID |

### list_pull_review_comments

List comments on a pull request review

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `id` | number | Yes |  | Review ID |

### merge_pull_request

Merge a pull request

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `style` | string | Yes |  | Merge style (merge, rebase, rebase-merge, squash) |
| `title` | string | No |  | Merge commit title |
| `message` | string | No |  | Merge commit message |
| `delete_branch_after_merge` | boolean | No |  | Delete head branch after merge |
| `force_merge` | boolean | No |  | Force merge even if checks have not passed |
| `merge_when_checks_succeed` | boolean | No |  | Schedule merge for when all checks succeed |

### list_pull_request_files

List changed files in a pull request

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `50` | Page size |

### get_pull_request_diff

Get the unified diff of a pull request. Pass an optional file_path to receive only the hunks for that file (match is exact on either the pre- or post-rename path). Use list_pull_request_files first to discover the file paths in the PR.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `file_path` | string | No |  | Optional. Return only the diff section for this file (matched on the diff --git boundary). Omit for the full diff. |

### list_pr_commits

List the individual commits of a pull request, newest first, with SHA, message, author and date. Use it to review a PR commit by commit (pair with get_commit_diff), and to spot fixup commits, commits that do not belong, or changes introduced and then reverted within the PR, none of which are visible in the squashed diff.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `50` | Page size |

### create_pull_review

Create a pull request review with optional inline comments

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `state` | string | Yes |  | Review state (APPROVED, REQUEST_CHANGES, COMMENT) |
| `body` | string | No |  | Review body |
| `comments` | string | No |  | Inline comments as JSON array, e.g. [{"path":"file.go","body":"Fix this","new_position":10}] |

### submit_pull_review

Submit a pending pull request review

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `id` | number | Yes |  | Review ID |
| `state` | string | Yes |  | Review state (APPROVED, REQUEST_CHANGES, COMMENT) |
| `body` | string | No |  | Review body |

### dismiss_pull_review

Dismiss a pull request review

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `id` | number | Yes |  | Review ID |
| `message` | string | Yes |  | Dismissal message |

### delete_pull_review (Destructive)

Delete a pending pull request review

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `id` | number | Yes |  | Review ID |

### create_review_requests

Request reviews from specific users or teams

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `reviewers` | string | No |  | Reviewer usernames (comma-separated) |
| `team_reviewers` | string | No |  | Team reviewer names (comma-separated) |

### delete_review_requests (Destructive)

Cancel pending review requests

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `index` | number | Yes |  | PR index |
| `reviewers` | string | No |  | Reviewer usernames (comma-separated) |
| `team_reviewers` | string | No |  | Team reviewer names (comma-separated) |

## Search

### search

Search across all types (code, repos, issues, users, organizations). Returns hit counts and a preview of results for each type. Use search_code or search_repos for paginated results.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `keyword` | string | Yes |  | Search keyword |

### search_code

Search code across all accessible repositories

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `keyword` | string | Yes |  | Search keyword |
| `language` | string | No |  | Filter by programming language |
| `filename` | string | No |  | Filter by filename or path |
| `mode` | string | No | `exact` | Search mode: exact, union, fuzzy |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `30` | Page size |

### search_repos

Search repositories by name or description

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `keyword` | string | Yes |  | Search keyword |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `30` | Page size |

## CI

### dispatch_workflow

Trigger a workflow run. Returns the run ID.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `workflow` | string | Yes |  | Workflow file (e.g. ci.yml) |
| `ref` | string | No |  | Git ref to build (branch/tag). Defaults to repo default branch. |
| `inputs` | string | No |  | Workflow inputs as JSON object, e.g. {"key": "value"} |

### list_workflow_runs

List workflow runs for a repository

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `status` | string | No |  | Filter by status (waiting, running, success, failure, cancelled) |
| `event` | string | No |  | Filter by event (push, pull_request, workflow_dispatch) |
| `run_number` | number | No |  | Filter by run number |
| `head_sha` | string | No |  | Filter by HEAD SHA |
| `page` | number | No | `1` | Page number (1-based) |
| `limit` | number | No | `30` | Page size |

### get_workflow_run

Get details of a specific workflow run

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `run_id` | number | Yes |  | Run ID |

### get_job_logs

Get logs for a CI build run, grouped by job

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `run_id` | number | Yes |  | Workflow run ID |
| `job` | string | No |  | Filter logs to a specific job name |
| `tail_lines` | number | No |  | Max log lines per job (default 200, max 500) |

### cancel_build (Destructive)

Cancel a running CI build

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `run_id` | number | Yes |  | Workflow run ID |

### list_secrets

List repository Actions secret names (values are write-only and never returned)

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### set_secret

Create or update a repository Actions secret. Secrets are write-only: there is no get_secret tool because the value cannot be read back.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `secret_name` | string | Yes |  | Secret name |
| `data` | string | Yes |  | Secret value. Write-only: there is no way to read it back once set. |

### delete_secret (Destructive)

Delete a repository Actions secret

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `secret_name` | string | Yes |  | Secret name |

### list_variables

List repository Actions variables

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### get_variable

Get a repository Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `variable_name` | string | Yes |  | Variable name |

### create_variable

Create a repository Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `variable_name` | string | Yes |  | Variable name |
| `value` | string | Yes |  | Variable value |

### update_variable

Update a repository Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `variable_name` | string | Yes |  | Variable name |
| `value` | string | Yes |  | Variable value |

### delete_variable (Destructive)

Delete a repository Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `variable_name` | string | Yes |  | Variable name |

### list_org_secrets

List organization Actions secret names (values are write-only and never returned)

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### set_org_secret

Create or update an organization Actions secret. Secrets are write-only: there is no get_org_secret tool because the value cannot be read back.

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `secret_name` | string | Yes |  | Secret name |
| `data` | string | Yes |  | Secret value. Write-only: there is no way to read it back once set. |

### delete_org_secret (Destructive)

Delete an organization Actions secret

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `secret_name` | string | Yes |  | Secret name |

### list_org_variables

List organization Actions variables

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### get_org_variable

Get an organization Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `variable_name` | string | Yes |  | Variable name |

### create_org_variable

Create an organization Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `variable_name` | string | Yes |  | Variable name |
| `value` | string | Yes |  | Variable value |

### update_org_variable

Update an organization Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `variable_name` | string | Yes |  | Variable name |
| `value` | string | Yes |  | Variable value |

### delete_org_variable (Destructive)

Delete an organization Actions variable

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `variable_name` | string | Yes |  | Variable name |

## Release

### list_releases

List releases for a repository

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### create_release

Create a release

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `tag_name` | string | Yes |  | Tag name for the release |
| `target_commitish` | string | No |  | Target branch or commit SHA (defaults to the repo default branch) |
| `name` | string | No |  | Release title |
| `body` | string | No |  | Release notes body |
| `draft` | boolean | No |  | Create as a draft release |
| `prerelease` | boolean | No |  | Mark as a prerelease |

### get_release

Get a release by ID

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Release ID |

### get_latest_release

Get the latest release

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |

### get_release_by_tag

Get a release by tag name

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `tag` | string | Yes |  | Tag name |

### update_release

Update a release

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Release ID |
| `tag_name` | string | No |  | Tag name for the release |
| `target_commitish` | string | No |  | Target branch or commit SHA |
| `name` | string | No |  | Release title |
| `body` | string | No |  | Release notes body |
| `draft` | boolean | No |  | Mark as a draft release |
| `prerelease` | boolean | No |  | Mark as a prerelease |

### delete_release (Destructive)

Delete a release

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Release ID |

### list_release_attachments

List attachments (assets) of a release

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Release ID |

### delete_release_attachment (Destructive)

Delete a release attachment (asset)

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Release ID |
| `attachment_id` | number | Yes |  | Attachment (asset) ID |

### list_tags

List tags for a repository

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### create_tag

Create a tag

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `tag_name` | string | Yes |  | Tag name |
| `target` | string | No |  | Target branch or commit SHA (defaults to the repo default branch) |
| `message` | string | No |  | Tag message |

### delete_tag (Destructive)

Delete a tag

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `tag` | string | Yes |  | Tag name |

## Webhook

### list_hooks

List webhooks for a repository

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### get_hook

Get a repository webhook by ID

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Webhook ID |

### create_hook

Create a repository webhook

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `type` | string | Yes | `gitea` | Webhook type (e.g. gitea, slack, discord) |
| `url` | string | Yes |  | Target URL the webhook payload is delivered to |
| `content_type` | string | No | `json` | Payload content type (json or form) |
| `secret` | string | No |  | Secret used to sign the payload |
| `events` | string | Yes |  | Events that trigger the webhook (comma-separated, e.g. push,pull_request) |
| `active` | boolean | No |  | Whether the webhook is active |
| `branch_filter` | string | No |  | Glob pattern restricting which branches trigger the webhook |
| `authorization_header` | string | No |  | Authorization header value sent with each delivery |

### update_hook

Update a repository webhook

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Webhook ID |
| `type` | string | No |  | Webhook type (e.g. gitea, slack, discord) |
| `url` | string | No |  | Target URL the webhook payload is delivered to |
| `content_type` | string | No |  | Payload content type (json or form) |
| `secret` | string | No |  | Secret used to sign the payload |
| `events` | string | No |  | Events that trigger the webhook (comma-separated, e.g. push,pull_request) |
| `active` | boolean | No |  | Whether the webhook is active |
| `branch_filter` | string | No |  | Glob pattern restricting which branches trigger the webhook |
| `authorization_header` | string | No |  | Authorization header value sent with each delivery |

### delete_hook (Destructive)

Delete a repository webhook

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Webhook ID |

### test_hook

Send a test delivery to a repository webhook

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `id` | number | Yes |  | Webhook ID |

### list_org_hooks

List webhooks for an organization

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `page` | number | Yes | `1` | Page number (1-based) |
| `limit` | number | Yes | `30` | Page size |

### get_org_hook

Get an organization webhook by ID

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `id` | number | Yes |  | Webhook ID |

### create_org_hook

Create an organization webhook

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `type` | string | Yes | `gitea` | Webhook type (e.g. gitea, slack, discord) |
| `url` | string | Yes |  | Target URL the webhook payload is delivered to |
| `content_type` | string | No | `json` | Payload content type (json or form) |
| `secret` | string | No |  | Secret used to sign the payload |
| `events` | string | Yes |  | Events that trigger the webhook (comma-separated, e.g. push,pull_request) |
| `active` | boolean | No |  | Whether the webhook is active |
| `branch_filter` | string | No |  | Glob pattern restricting which branches trigger the webhook |
| `authorization_header` | string | No |  | Authorization header value sent with each delivery |

### update_org_hook

Update an organization webhook

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `id` | number | Yes |  | Webhook ID |
| `type` | string | No |  | Webhook type (e.g. gitea, slack, discord) |
| `url` | string | No |  | Target URL the webhook payload is delivered to |
| `content_type` | string | No |  | Payload content type (json or form) |
| `secret` | string | No |  | Secret used to sign the payload |
| `events` | string | No |  | Events that trigger the webhook (comma-separated, e.g. push,pull_request) |
| `active` | boolean | No |  | Whether the webhook is active |
| `branch_filter` | string | No |  | Glob pattern restricting which branches trigger the webhook |
| `authorization_header` | string | No |  | Authorization header value sent with each delivery |

### delete_org_hook (Destructive)

Delete an organization webhook

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Organization name |
| `id` | number | Yes |  | Webhook ID |

## Protection

### list_branch_protections

List branch protection rules for a repository

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |

### get_branch_protection

Get a branch protection rule by name

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `name` | string | Yes |  | Branch protection rule name (glob pattern) |

### create_branch_protection

Create a branch protection rule

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `rule_name` | string | Yes |  | Branch name glob pattern this rule protects |
| `enable_push` | boolean | No |  | Allow whitelisted users/teams to push directly |
| `enable_push_whitelist` | boolean | No |  | Restrict direct pushes to the push whitelist |
| `push_whitelist_usernames` | string | No |  | Usernames allowed to push directly (comma-separated) |
| `push_whitelist_teams` | string | No |  | Teams allowed to push directly (comma-separated) |
| `push_whitelist_deploy_keys` | boolean | No |  | Allow deploy keys to push directly |
| `enable_merge_whitelist` | boolean | No |  | Restrict merging to the merge whitelist |
| `merge_whitelist_usernames` | string | No |  | Usernames allowed to merge (comma-separated) |
| `merge_whitelist_teams` | string | No |  | Teams allowed to merge (comma-separated) |
| `enable_status_check` | boolean | No |  | Require status checks to pass before merging |
| `status_check_contexts` | string | No |  | Required status check contexts (comma-separated) |
| `required_approvals` | number | No |  | Minimum number of approving reviews required |
| `enable_approvals_whitelist` | boolean | No |  | Restrict qualifying approvals to the approvals whitelist |
| `approvals_whitelist_username` | string | No |  | Usernames whose approvals count (comma-separated) |
| `approvals_whitelist_teams` | string | No |  | Teams whose approvals count (comma-separated) |
| `block_on_rejected_reviews` | boolean | No |  | Block merging when there are pending rejected reviews |
| `block_on_official_review_requests` | boolean | No |  | Block merging when there are pending official review requests |
| `block_on_outdated_branch` | boolean | No |  | Block merging when the head branch is outdated |
| `dismiss_stale_approvals` | boolean | No |  | Dismiss approvals when new commits are pushed |
| `require_signed_commits` | boolean | No |  | Require commits to be signed |
| `protected_file_patterns` | string | No |  | Glob patterns of files that cannot be changed directly (semicolon-separated) |
| `unprotected_file_patterns` | string | No |  | Glob patterns of files exempt from protection (semicolon-separated) |

### update_branch_protection

Update a branch protection rule

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `name` | string | Yes |  | Branch protection rule name (glob pattern) |
| `enable_push` | boolean | No |  | Allow whitelisted users/teams to push directly |
| `enable_push_whitelist` | boolean | No |  | Restrict direct pushes to the push whitelist |
| `push_whitelist_usernames` | string | No |  | Usernames allowed to push directly (comma-separated) |
| `push_whitelist_teams` | string | No |  | Teams allowed to push directly (comma-separated) |
| `push_whitelist_deploy_keys` | boolean | No |  | Allow deploy keys to push directly |
| `enable_merge_whitelist` | boolean | No |  | Restrict merging to the merge whitelist |
| `merge_whitelist_usernames` | string | No |  | Usernames allowed to merge (comma-separated) |
| `merge_whitelist_teams` | string | No |  | Teams allowed to merge (comma-separated) |
| `enable_status_check` | boolean | No |  | Require status checks to pass before merging |
| `status_check_contexts` | string | No |  | Required status check contexts (comma-separated) |
| `required_approvals` | number | No |  | Minimum number of approving reviews required |
| `enable_approvals_whitelist` | boolean | No |  | Restrict qualifying approvals to the approvals whitelist |
| `approvals_whitelist_username` | string | No |  | Usernames whose approvals count (comma-separated) |
| `approvals_whitelist_teams` | string | No |  | Teams whose approvals count (comma-separated) |
| `block_on_rejected_reviews` | boolean | No |  | Block merging when there are pending rejected reviews |
| `block_on_official_review_requests` | boolean | No |  | Block merging when there are pending official review requests |
| `block_on_outdated_branch` | boolean | No |  | Block merging when the head branch is outdated |
| `dismiss_stale_approvals` | boolean | No |  | Dismiss approvals when new commits are pushed |
| `require_signed_commits` | boolean | No |  | Require commits to be signed |
| `protected_file_patterns` | string | No |  | Glob patterns of files that cannot be changed directly (semicolon-separated) |
| `unprotected_file_patterns` | string | No |  | Glob patterns of files exempt from protection (semicolon-separated) |

### delete_branch_protection (Destructive)

Delete a branch protection rule

| Name | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `owner` | string | Yes |  | Repository owner |
| `repo` | string | Yes |  | Repository name |
| `name` | string | Yes |  | Branch protection rule name (glob pattern) |
