Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -859,8 +859,9 @@ The following sets of tools are available:
Options are:
1. get - Get details of a specific issue.
2. get_comments - Get issue comments.
3. get_sub_issues - Get sub-issues of the issue.
4. get_labels - Get labels assigned to the issue.
3. get_sub_issues - Get sub-issues (children) of the issue.
4. get_parent - Get the parent issue, if this issue is a sub-issue of another.
5. get_labels - Get labels assigned to the issue.
(string, required)
- `owner`: The owner of the repository (string, required)
- `page`: Page number for pagination (min 1) (number, optional)
Expand Down
34 changes: 33 additions & 1 deletion docs/feature-flags.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ runtime behavior (such as output formatting) won't appear here.
- `type`: Type of this issue. Only use if issue types are enabled for this repository. Use list_issue_types tool to get valid type values for this repository or its owner organization. If the repository doesn't support issue types, omit this parameter. (string, optional)

- **ui_get** - Get UI data
- **Required OAuth Scopes**: `repo`, `read:org`
- **Required OAuth Scopes (any of)**: `repo`, `read:org`
- **Accepted OAuth Scopes**: `admin:org`, `read:org`, `repo`, `write:org`
- `method`: The type of data to fetch (string, required)
- `owner`: Repository owner (required for all methods) (string, required)
Expand Down Expand Up @@ -324,4 +324,36 @@ runtime behavior (such as output formatting) won't appear here.
- `repo`: Repository name (string, required)
- `start_line`: Optional 1-based starting line of the window of interest. Only ranges overlapping [start_line, end_line] are returned, clamped to the window. (number, optional)

### `issue_dependencies`

- **issue_dependency_read** - Read issue dependencies
- **Required OAuth Scopes**: `repo`
- `after`: Cursor for pagination. Use the cursor from the previous response. (string, optional)
- `issue_number`: The number of the issue (number, required)
- `method`: The read operation to perform on a single issue's dependencies.
Options are:
1. get_blocked_by - List the issues that block this issue (this issue is blocked by them).
2. get_blocking - List the issues that this issue blocks.
(string, required)
- `owner`: The owner of the repository (string, required)
- `perPage`: Results per page for pagination (min 1, max 100) (number, optional)
- `repo`: The name of the repository (string, required)

- **issue_dependency_write** - Change issue dependency
- **Required OAuth Scopes**: `repo`
- `issue_number`: The number of the subject issue (number, required)
- `method`: The action to perform.
Options are:
- 'add' - create the dependency relationship.
- 'remove' - delete the dependency relationship. (string, required)
- `owner`: The owner of the subject issue's repository (string, required)
- `related_issue_number`: The number of the related issue to link or unlink (number, required)
- `related_owner`: The owner of the related issue's repository. Defaults to 'owner' when omitted. (string, optional)
- `related_repo`: The name of the related issue's repository. Defaults to 'repo' when omitted. (string, optional)
- `repo`: The name of the subject issue's repository (string, required)
- `type`: The relationship direction relative to the subject issue.
Options are:
- 'blocked_by' - the subject issue is blocked by the related issue.
- 'blocking' - the subject issue blocks the related issue. (string, required)

<!-- END AUTOMATED FEATURE FLAG TOOLS -->
34 changes: 33 additions & 1 deletion docs/insiders-features.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ The list below is generated from the Go source. It covers tool **inventory and s
- `type`: Type of this issue. Only use if issue types are enabled for this repository. Use list_issue_types tool to get valid type values for this repository or its owner organization. If the repository doesn't support issue types, omit this parameter. (string, optional)

- **ui_get** - Get UI data
- **Required OAuth Scopes**: `repo`, `read:org`
- **Required OAuth Scopes (any of)**: `repo`, `read:org`
- **Accepted OAuth Scopes**: `admin:org`, `read:org`, `repo`, `write:org`
- `method`: The type of data to fetch (string, required)
- `owner`: Repository owner (required for all methods) (string, required)
Expand Down Expand Up @@ -144,6 +144,38 @@ The list below is generated from the Go source. It covers tool **inventory and s
- `repo`: Repository name (string, required)
- `start_line`: Optional 1-based starting line of the window of interest. Only ranges overlapping [start_line, end_line] are returned, clamped to the window. (number, optional)

### `issue_dependencies`

- **issue_dependency_read** - Read issue dependencies
- **Required OAuth Scopes**: `repo`
- `after`: Cursor for pagination. Use the cursor from the previous response. (string, optional)
- `issue_number`: The number of the issue (number, required)
- `method`: The read operation to perform on a single issue's dependencies.
Options are:
1. get_blocked_by - List the issues that block this issue (this issue is blocked by them).
2. get_blocking - List the issues that this issue blocks.
(string, required)
- `owner`: The owner of the repository (string, required)
- `perPage`: Results per page for pagination (min 1, max 100) (number, optional)
- `repo`: The name of the repository (string, required)

- **issue_dependency_write** - Change issue dependency
- **Required OAuth Scopes**: `repo`
- `issue_number`: The number of the subject issue (number, required)
- `method`: The action to perform.
Options are:
- 'add' - create the dependency relationship.
- 'remove' - delete the dependency relationship. (string, required)
- `owner`: The owner of the subject issue's repository (string, required)
- `related_issue_number`: The number of the related issue to link or unlink (number, required)
- `related_owner`: The owner of the related issue's repository. Defaults to 'owner' when omitted. (string, optional)
- `related_repo`: The name of the related issue's repository. Defaults to 'repo' when omitted. (string, optional)
- `repo`: The name of the subject issue's repository (string, required)
- `type`: The relationship direction relative to the subject issue.
Options are:
- 'blocked_by' - the subject issue is blocked by the related issue.
- 'blocking' - the subject issue blocks the related issue. (string, required)

<!-- END AUTOMATED INSIDERS TOOLS -->

---
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
{
"annotations": {
"readOnlyHint": true,
"title": "Read issue dependencies"
},
"description": "Read an issue's dependency relationships in a GitHub repository: the issues that block it (blocked_by) or the issues it blocks (blocking).",
"inputSchema": {
"properties": {
"after": {
"description": "Cursor for pagination. Use the cursor from the previous response.",
"type": "string"
},
"issue_number": {
"description": "The number of the issue",
"type": "number"
},
"method": {
"description": "The read operation to perform on a single issue's dependencies.\nOptions are:\n1. get_blocked_by - List the issues that block this issue (this issue is blocked by them).\n2. get_blocking - List the issues that this issue blocks.\n",
"enum": [
"get_blocked_by",
"get_blocking"
],
"type": "string"
},
"owner": {
"description": "The owner of the repository",
"type": "string"
},
"perPage": {
"description": "Results per page for pagination (min 1, max 100)",
"maximum": 100,
"minimum": 1,
"type": "number"
},
"repo": {
"description": "The name of the repository",
"type": "string"
}
},
"required": [
"method",
"owner",
"repo",
"issue_number"
],
"type": "object"
},
"name": "issue_dependency_read"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
{
"annotations": {
"title": "Change issue dependency"
},
"description": "Add or remove an issue dependency relationship in a GitHub repository. Use type 'blocked_by' to record that the subject issue is blocked by a related issue, or type 'blocking' to record that the subject issue blocks a related issue. The related issue defaults to the same repository as the subject unless related_owner/related_repo are provided.",
"inputSchema": {
"properties": {
"issue_number": {
"description": "The number of the subject issue",
"type": "number"
},
"method": {
"description": "The action to perform.\nOptions are:\n- 'add' - create the dependency relationship.\n- 'remove' - delete the dependency relationship.",
"enum": [
"add",
"remove"
],
"type": "string"
},
"owner": {
"description": "The owner of the subject issue's repository",
"type": "string"
},
"related_issue_number": {
"description": "The number of the related issue to link or unlink",
"type": "number"
},
"related_owner": {
"description": "The owner of the related issue's repository. Defaults to 'owner' when omitted.",
"type": "string"
},
"related_repo": {
"description": "The name of the related issue's repository. Defaults to 'repo' when omitted.",
"type": "string"
},
"repo": {
"description": "The name of the subject issue's repository",
"type": "string"
},
"type": {
"description": "The relationship direction relative to the subject issue.\nOptions are:\n- 'blocked_by' - the subject issue is blocked by the related issue.\n- 'blocking' - the subject issue blocks the related issue.",
"enum": [
"blocked_by",
"blocking"
],
"type": "string"
}
},
"required": [
"method",
"type",
"owner",
"repo",
"issue_number",
"related_issue_number"
],
"type": "object"
},
"name": "issue_dependency_write"
}
3 changes: 2 additions & 1 deletion pkg/github/__toolsnaps__/issue_read.snap
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,12 @@
"type": "number"
},
"method": {
"description": "The read operation to perform on a single issue.\nOptions are:\n1. get - Get details of a specific issue.\n2. get_comments - Get issue comments.\n3. get_sub_issues - Get sub-issues of the issue.\n4. get_labels - Get labels assigned to the issue.\n",
"description": "The read operation to perform on a single issue.\nOptions are:\n1. get - Get details of a specific issue.\n2. get_comments - Get issue comments.\n3. get_sub_issues - Get sub-issues (children) of the issue.\n4. get_parent - Get the parent issue, if this issue is a sub-issue of another.\n5. get_labels - Get labels assigned to the issue.\n",
"enum": [
"get",
"get_comments",
"get_sub_issues",
"get_parent",
"get_labels"
],
"type": "string"
Expand Down
9 changes: 9 additions & 0 deletions pkg/github/feature_flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@ const FeatureFlagIssueFields = "remote_mcp_issue_fields"
// is not advertised by default, keeping the tool surface small unless opted in.
const FeatureFlagFileBlame = "file_blame"

// FeatureFlagIssueDependencies is the feature flag name for the issue dependency
// tools (issue_dependency_read / issue_dependency_write), which read and edit an
// issue's blocked-by / blocking relationships. It is gated so these tools are not
// advertised in the default surface, keeping the fixed tool-schema cost small
// unless explicitly opted in.
const FeatureFlagIssueDependencies = "issue_dependencies"

// AllowedFeatureFlags is the allowlist of feature flags that can be enabled
// by users via --features CLI flag or X-MCP-Features HTTP header.
// Only flags in this list are accepted; unknown flags are silently ignored.
Expand All @@ -33,6 +40,7 @@ var AllowedFeatureFlags = []string{
FeatureFlagIssuesGranular,
FeatureFlagPullRequestsGranular,
FeatureFlagFileBlame,
FeatureFlagIssueDependencies,
}

// InsidersFeatureFlags is the list of feature flags that insiders mode enables.
Expand All @@ -44,6 +52,7 @@ var InsidersFeatureFlags = []string{
FeatureFlagCSVOutput,
FeatureFlagIssueFields,
FeatureFlagFileBlame,
FeatureFlagIssueDependencies,
}
Comment thread
zwick marked this conversation as resolved.

// FeatureFlags defines runtime feature toggles that adjust tool behavior.
Expand Down
Loading
Loading