|
| 1 | +# Feature Flags |
| 2 | + |
| 3 | +Feature flags let you opt into experimental tool behavior on top of the default |
| 4 | +GitHub MCP Server surface. Insiders Mode turns on a curated subset of these |
| 5 | +flags automatically — see [Insiders Features](./insiders-features.md) for that |
| 6 | +specific set. |
| 7 | + |
| 8 | +For background on how flags resolve at request time, see the [resolution |
| 9 | +section in the Insiders docs](./insiders-features.md#how-feature-flags-are-resolved). |
| 10 | + |
| 11 | +## Enabling a flag |
| 12 | + |
| 13 | +| Method | Remote Server | Local Server | |
| 14 | +|--------|---------------|--------------| |
| 15 | +| Header | `X-MCP-Features: <flag>,<flag>` | N/A | |
| 16 | +| CLI flag | N/A | `--features=<flag>,<flag>` | |
| 17 | +| Environment variable | N/A | `GITHUB_FEATURES=<flag>,<flag>` | |
| 18 | + |
| 19 | +Only flags listed in |
| 20 | +[`AllowedFeatureFlags`](../pkg/github/feature_flags.go) can be enabled by |
| 21 | +end users. Insiders-only flags are not user-toggleable. |
| 22 | + |
| 23 | +--- |
| 24 | + |
| 25 | +## Tools affected by each flag |
| 26 | + |
| 27 | +The table below is regenerated from the Go source. For each user-controllable |
| 28 | +feature flag, it lists every tool whose registration or input schema differs |
| 29 | +from the default — either because the flag introduces a new tool, or because |
| 30 | +it selects a flag-aware variant of an existing tool. |
| 31 | + |
| 32 | +<!-- START AUTOMATED FEATURE FLAG TOOLS --> |
| 33 | +### `remote_mcp_issue_fields` |
| 34 | + |
| 35 | +- **list_issue_fields** - List issue fields |
| 36 | + - **Required OAuth Scopes**: `repo`, `read:org` |
| 37 | + - **Accepted OAuth Scopes**: `admin:org`, `read:org`, `repo`, `write:org` |
| 38 | + - `owner`: The account owner of the repository or organization. The name is not case sensitive. (string, required) |
| 39 | + - `repo`: The name of the repository. When provided, returns fields for this specific repository (inherited from its organization). When omitted, returns org-level fields directly. (string, optional) |
| 40 | + |
| 41 | +- **list_issues** - List issues |
| 42 | + - **Required OAuth Scopes**: `repo` |
| 43 | + - `after`: Cursor for pagination. Use the endCursor from the previous page's PageInfo for GraphQL APIs. (string, optional) |
| 44 | + - `direction`: Order direction. If provided, the 'orderBy' also needs to be provided. (string, optional) |
| 45 | + - `field_filters`: Filter by custom issue field values. Each entry takes a field_name and a value; the server looks up the field and coerces the value to its type (single-select option name, text, number, or YYYY-MM-DD date). (object[], optional) |
| 46 | + - `labels`: Filter by labels (string[], optional) |
| 47 | + - `orderBy`: Order issues by field. If provided, the 'direction' also needs to be provided. (string, optional) |
| 48 | + - `owner`: Repository owner (string, required) |
| 49 | + - `perPage`: Results per page for pagination (min 1, max 100) (number, optional) |
| 50 | + - `repo`: Repository name (string, required) |
| 51 | + - `since`: Filter by date (ISO 8601 timestamp) (string, optional) |
| 52 | + - `state`: Filter by state, by default both open and closed issues are returned when not provided (string, optional) |
| 53 | + |
| 54 | +### `issues_granular` |
| 55 | + |
| 56 | +- **add_sub_issue** - Add Sub-Issue |
| 57 | + - **Required OAuth Scopes**: `repo` |
| 58 | + - `issue_number`: The parent issue number (number, required) |
| 59 | + - `owner`: Repository owner (username or organization) (string, required) |
| 60 | + - `replace_parent`: If true, reparent the sub-issue if it already has a parent (boolean, optional) |
| 61 | + - `repo`: Repository name (string, required) |
| 62 | + - `sub_issue_id`: The ID of the sub-issue to add. ID is not the same as issue number (number, required) |
| 63 | + |
| 64 | +- **create_issue** - Create Issue |
| 65 | + - **Required OAuth Scopes**: `repo` |
| 66 | + - `body`: Issue body content (optional) (string, optional) |
| 67 | + - `owner`: Repository owner (username or organization) (string, required) |
| 68 | + - `repo`: Repository name (string, required) |
| 69 | + - `title`: Issue title (string, required) |
| 70 | + |
| 71 | +- **remove_sub_issue** - Remove Sub-Issue |
| 72 | + - **Required OAuth Scopes**: `repo` |
| 73 | + - `issue_number`: The parent issue number (number, required) |
| 74 | + - `owner`: Repository owner (username or organization) (string, required) |
| 75 | + - `repo`: Repository name (string, required) |
| 76 | + - `sub_issue_id`: The ID of the sub-issue to remove. ID is not the same as issue number (number, required) |
| 77 | + |
| 78 | +- **reprioritize_sub_issue** - Reprioritize Sub-Issue |
| 79 | + - **Required OAuth Scopes**: `repo` |
| 80 | + - `after_id`: The ID of the sub-issue to place this after (either after_id OR before_id should be specified) (number, optional) |
| 81 | + - `before_id`: The ID of the sub-issue to place this before (either after_id OR before_id should be specified) (number, optional) |
| 82 | + - `issue_number`: The parent issue number (number, required) |
| 83 | + - `owner`: Repository owner (username or organization) (string, required) |
| 84 | + - `repo`: Repository name (string, required) |
| 85 | + - `sub_issue_id`: The ID of the sub-issue to reorder. ID is not the same as issue number (number, required) |
| 86 | + |
| 87 | +- **set_issue_fields** - Set Issue Fields |
| 88 | + - **Required OAuth Scopes**: `repo` |
| 89 | + - `fields`: Array of issue field values to set. Each element must have a 'field_id' (string, the GraphQL node ID of the field) and exactly one value field: 'text_value' for text fields, 'number_value' for number fields, 'date_value' (ISO 8601 date string) for date fields, or 'single_select_option_id' (the GraphQL node ID of the option) for single select fields. Set 'delete' to true to remove a field value. (object[], required) |
| 90 | + - `issue_number`: The issue number to update (number, required) |
| 91 | + - `owner`: Repository owner (username or organization) (string, required) |
| 92 | + - `repo`: Repository name (string, required) |
| 93 | + |
| 94 | +- **update_issue_assignees** - Update Issue Assignees |
| 95 | + - **Required OAuth Scopes**: `repo` |
| 96 | + - `assignees`: GitHub usernames to assign to this issue (string[], required) |
| 97 | + - `issue_number`: The issue number to update (number, required) |
| 98 | + - `owner`: Repository owner (username or organization) (string, required) |
| 99 | + - `repo`: Repository name (string, required) |
| 100 | + |
| 101 | +- **update_issue_body** - Update Issue Body |
| 102 | + - **Required OAuth Scopes**: `repo` |
| 103 | + - `body`: The new body content for the issue (string, required) |
| 104 | + - `issue_number`: The issue number to update (number, required) |
| 105 | + - `owner`: Repository owner (username or organization) (string, required) |
| 106 | + - `repo`: Repository name (string, required) |
| 107 | + |
| 108 | +- **update_issue_labels** - Update Issue Labels |
| 109 | + - **Required OAuth Scopes**: `repo` |
| 110 | + - `issue_number`: The issue number to update (number, required) |
| 111 | + - `labels`: Labels to apply to this issue. ([], required) |
| 112 | + - `owner`: Repository owner (username or organization) (string, required) |
| 113 | + - `repo`: Repository name (string, required) |
| 114 | + |
| 115 | +- **update_issue_milestone** - Update Issue Milestone |
| 116 | + - **Required OAuth Scopes**: `repo` |
| 117 | + - `issue_number`: The issue number to update (number, required) |
| 118 | + - `milestone`: The milestone number to set on the issue (integer, required) |
| 119 | + - `owner`: Repository owner (username or organization) (string, required) |
| 120 | + - `repo`: Repository name (string, required) |
| 121 | + |
| 122 | +- **update_issue_state** - Update Issue State |
| 123 | + - **Required OAuth Scopes**: `repo` |
| 124 | + - `issue_number`: The issue number to update (number, required) |
| 125 | + - `owner`: Repository owner (username or organization) (string, required) |
| 126 | + - `repo`: Repository name (string, required) |
| 127 | + - `state`: The new state for the issue (string, required) |
| 128 | + - `state_reason`: The reason for the state change (only for closed state) (string, optional) |
| 129 | + |
| 130 | +- **update_issue_title** - Update Issue Title |
| 131 | + - **Required OAuth Scopes**: `repo` |
| 132 | + - `issue_number`: The issue number to update (number, required) |
| 133 | + - `owner`: Repository owner (username or organization) (string, required) |
| 134 | + - `repo`: Repository name (string, required) |
| 135 | + - `title`: The new title for the issue (string, required) |
| 136 | + |
| 137 | +- **update_issue_type** - Update Issue Type |
| 138 | + - **Required OAuth Scopes**: `repo` |
| 139 | + - `issue_number`: The issue number to update (number, required) |
| 140 | + - `issue_type`: The issue type to set (string, required) |
| 141 | + - `owner`: Repository owner (username or organization) (string, required) |
| 142 | + - `rationale`: One concise sentence explaining what specifically about the issue led you to choose this type. State the concrete signal (e.g. 'Reports a crash when saving' → bug, 'Asks for dark mode support' → feature). (string, optional) |
| 143 | + - `repo`: Repository name (string, required) |
| 144 | + |
| 145 | +### `pull_requests_granular` |
| 146 | + |
| 147 | +- **add_pull_request_review_comment** - Add Pull Request Review Comment |
| 148 | + - **Required OAuth Scopes**: `repo` |
| 149 | + - `body`: The comment body (string, required) |
| 150 | + - `line`: The line number in the diff to comment on (optional) (number, optional) |
| 151 | + - `owner`: Repository owner (username or organization) (string, required) |
| 152 | + - `path`: The relative path of the file to comment on (string, required) |
| 153 | + - `pullNumber`: The pull request number (number, required) |
| 154 | + - `repo`: Repository name (string, required) |
| 155 | + - `side`: The side of the diff to comment on (optional) (string, optional) |
| 156 | + - `startLine`: The start line of a multi-line comment (optional) (number, optional) |
| 157 | + - `startSide`: The start side of a multi-line comment (optional) (string, optional) |
| 158 | + - `subjectType`: The subject type of the comment (string, required) |
| 159 | + |
| 160 | +- **create_pull_request_review** - Create Pull Request Review |
| 161 | + - **Required OAuth Scopes**: `repo` |
| 162 | + - `body`: The review body text (optional) (string, optional) |
| 163 | + - `commitID`: The SHA of the commit to review (optional, defaults to latest) (string, optional) |
| 164 | + - `event`: The review action to perform. If omitted, creates a pending review. (string, optional) |
| 165 | + - `owner`: Repository owner (username or organization) (string, required) |
| 166 | + - `pullNumber`: The pull request number (number, required) |
| 167 | + - `repo`: Repository name (string, required) |
| 168 | + |
| 169 | +- **delete_pending_pull_request_review** - Delete Pending Pull Request Review |
| 170 | + - **Required OAuth Scopes**: `repo` |
| 171 | + - `owner`: Repository owner (username or organization) (string, required) |
| 172 | + - `pullNumber`: The pull request number (number, required) |
| 173 | + - `repo`: Repository name (string, required) |
| 174 | + |
| 175 | +- **request_pull_request_reviewers** - Request Pull Request Reviewers |
| 176 | + - **Required OAuth Scopes**: `repo` |
| 177 | + - `owner`: Repository owner (username or organization) (string, required) |
| 178 | + - `pullNumber`: The pull request number (number, required) |
| 179 | + - `repo`: Repository name (string, required) |
| 180 | + - `reviewers`: GitHub usernames to request reviews from (string[], required) |
| 181 | + |
| 182 | +- **resolve_review_thread** - Resolve Review Thread |
| 183 | + - **Required OAuth Scopes**: `repo` |
| 184 | + - `threadID`: The node ID of the review thread to resolve (e.g., PRRT_kwDOxxx) (string, required) |
| 185 | + |
| 186 | +- **submit_pending_pull_request_review** - Submit Pending Pull Request Review |
| 187 | + - **Required OAuth Scopes**: `repo` |
| 188 | + - `body`: The review body text (optional) (string, optional) |
| 189 | + - `event`: The review action to perform (string, required) |
| 190 | + - `owner`: Repository owner (username or organization) (string, required) |
| 191 | + - `pullNumber`: The pull request number (number, required) |
| 192 | + - `repo`: Repository name (string, required) |
| 193 | + |
| 194 | +- **unresolve_review_thread** - Unresolve Review Thread |
| 195 | + - **Required OAuth Scopes**: `repo` |
| 196 | + - `threadID`: The node ID of the review thread to unresolve (e.g., PRRT_kwDOxxx) (string, required) |
| 197 | + |
| 198 | +- **update_pull_request_body** - Update Pull Request Body |
| 199 | + - **Required OAuth Scopes**: `repo` |
| 200 | + - `body`: The new body content for the pull request (string, required) |
| 201 | + - `owner`: Repository owner (username or organization) (string, required) |
| 202 | + - `pullNumber`: The pull request number (number, required) |
| 203 | + - `repo`: Repository name (string, required) |
| 204 | + |
| 205 | +- **update_pull_request_draft_state** - Update Pull Request Draft State |
| 206 | + - **Required OAuth Scopes**: `repo` |
| 207 | + - `draft`: Set to true to convert to draft, false to mark as ready for review (boolean, required) |
| 208 | + - `owner`: Repository owner (username or organization) (string, required) |
| 209 | + - `pullNumber`: The pull request number (number, required) |
| 210 | + - `repo`: Repository name (string, required) |
| 211 | + |
| 212 | +- **update_pull_request_state** - Update Pull Request State |
| 213 | + - **Required OAuth Scopes**: `repo` |
| 214 | + - `owner`: Repository owner (username or organization) (string, required) |
| 215 | + - `pullNumber`: The pull request number (number, required) |
| 216 | + - `repo`: Repository name (string, required) |
| 217 | + - `state`: The new state for the pull request (string, required) |
| 218 | + |
| 219 | +- **update_pull_request_title** - Update Pull Request Title |
| 220 | + - **Required OAuth Scopes**: `repo` |
| 221 | + - `owner`: Repository owner (username or organization) (string, required) |
| 222 | + - `pullNumber`: The pull request number (number, required) |
| 223 | + - `repo`: Repository name (string, required) |
| 224 | + - `title`: The new title for the pull request (string, required) |
| 225 | +<!-- END AUTOMATED FEATURE FLAG TOOLS --> |
0 commit comments