Skip to content

Commit 6568249

Browse files
authored
Merge branch 'main' into feature/fix-empty-file-error
2 parents fb97be1 + bf64678 commit 6568249

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+3241
-1809
lines changed

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM node:20-alpine AS ui-build
1+
FROM node:20-alpine@sha256:09e2b3d9726018aecf269bd35325f46bf75046a643a66d28360ec71132750ec8 AS ui-build
22
WORKDIR /app
33
COPY ui/package*.json ./ui/
44
RUN cd ui && npm ci
@@ -7,7 +7,7 @@ COPY ui/ ./ui/
77
RUN mkdir -p ./pkg/github/ui_dist && \
88
cd ui && npm run build
99

10-
FROM golang:1.25.7-alpine AS build
10+
FROM golang:1.25.7-alpine@sha256:f6751d823c26342f9506c03797d2527668d095b0a15f1862cddb4d927a7a4ced AS build
1111
ARG VERSION="dev"
1212

1313
# Set the working directory
@@ -30,7 +30,7 @@ RUN --mount=type=cache,target=/go/pkg/mod \
3030
-o /bin/github-mcp-server ./cmd/github-mcp-server
3131

3232
# Make a stage to run the app
33-
FROM gcr.io/distroless/base-debian12
33+
FROM gcr.io/distroless/base-debian12@sha256:937c7eaaf6f3f2d38a1f8c4aeff326f0c56e4593ea152e9e8f74d976dde52f56
3434

3535
# Add required MCP server annotation
3636
LABEL io.modelcontextprotocol.server.name="io.github.github/github-mcp-server"

README.md

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ When no toolsets are specified, [default toolsets](#default-toolset) are used.
140140
</tr>
141141
</table>
142142

143-
See [Remote Server Documentation](docs/remote-server.md#insiders-mode) for more details and examples.
143+
See [Remote Server Documentation](docs/remote-server.md#insiders-mode) for more details and examples, and [Insiders Features](docs/insiders-features.md) for a full list of what's available.
144144

145145
#### GitHub Enterprise
146146

@@ -153,7 +153,7 @@ Example for `https://octocorp.ghe.com` with GitHub PAT token:
153153
```
154154
{
155155
...
156-
"proxima-github": {
156+
"github-octocorp": {
157157
"type": "http",
158158
"url": "https://copilot-api.octocorp.ghe.com/mcp",
159159
"headers": {
@@ -560,6 +560,7 @@ The following sets of tools are available:
560560
| <picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/person-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/person-light.png"><img src="pkg/octicons/icons/person-light.png" width="20" height="20" alt="person"></picture> | `context` | **Strongly recommended**: Tools that provide context about the current user and GitHub context you are operating in |
561561
| <picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/workflow-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/workflow-light.png"><img src="pkg/octicons/icons/workflow-light.png" width="20" height="20" alt="workflow"></picture> | `actions` | GitHub Actions workflows and CI/CD operations |
562562
| <picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/codescan-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/codescan-light.png"><img src="pkg/octicons/icons/codescan-light.png" width="20" height="20" alt="codescan"></picture> | `code_security` | Code security related tools, such as GitHub Code Scanning |
563+
| <picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/copilot-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/copilot-light.png"><img src="pkg/octicons/icons/copilot-light.png" width="20" height="20" alt="copilot"></picture> | `copilot` | Copilot related tools |
563564
| <picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/dependabot-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/dependabot-light.png"><img src="pkg/octicons/icons/dependabot-light.png" width="20" height="20" alt="dependabot"></picture> | `dependabot` | Dependabot tools |
564565
| <picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/comment-discussion-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/comment-discussion-light.png"><img src="pkg/octicons/icons/comment-discussion-light.png" width="20" height="20" alt="comment-discussion"></picture> | `discussions` | GitHub Discussions related tools |
565566
| <picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/logo-gist-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/logo-gist-light.png"><img src="pkg/octicons/icons/logo-gist-light.png" width="20" height="20" alt="logo-gist"></picture> | `gists` | GitHub Gist related tools |
@@ -686,6 +687,26 @@ The following sets of tools are available:
686687

687688
<details>
688689

690+
<summary><picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/copilot-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/copilot-light.png"><img src="pkg/octicons/icons/copilot-light.png" width="20" height="20" alt="copilot"></picture> Copilot</summary>
691+
692+
- **assign_copilot_to_issue** - Assign Copilot to issue
693+
- **Required OAuth Scopes**: `repo`
694+
- `base_ref`: Git reference (e.g., branch) that the agent will start its work from. If not specified, defaults to the repository's default branch (string, optional)
695+
- `custom_instructions`: Optional custom instructions to guide the agent beyond the issue body. Use this to provide additional context, constraints, or guidance that is not captured in the issue description (string, optional)
696+
- `issue_number`: Issue number (number, required)
697+
- `owner`: Repository owner (string, required)
698+
- `repo`: Repository name (string, required)
699+
700+
- **request_copilot_review** - Request Copilot review
701+
- **Required OAuth Scopes**: `repo`
702+
- `owner`: Repository owner (string, required)
703+
- `pullNumber`: Pull request number (number, required)
704+
- `repo`: Repository name (string, required)
705+
706+
</details>
707+
708+
<details>
709+
689710
<summary><picture><source media="(prefers-color-scheme: dark)" srcset="pkg/octicons/icons/dependabot-dark.png"><source media="(prefers-color-scheme: light)" srcset="pkg/octicons/icons/dependabot-light.png"><img src="pkg/octicons/icons/dependabot-light.png" width="20" height="20" alt="dependabot"></picture> Dependabot</summary>
690711

691712
- **get_dependabot_alert** - Get dependabot alert
@@ -794,14 +815,6 @@ The following sets of tools are available:
794815
- `owner`: Repository owner (string, required)
795816
- `repo`: Repository name (string, required)
796817

797-
- **assign_copilot_to_issue** - Assign Copilot to issue
798-
- **Required OAuth Scopes**: `repo`
799-
- `base_ref`: Git reference (e.g., branch) that the agent will start its work from. If not specified, defaults to the repository's default branch (string, optional)
800-
- `custom_instructions`: Optional custom instructions to guide the agent beyond the issue body. Use this to provide additional context, constraints, or guidance that is not captured in the issue description (string, optional)
801-
- `issue_number`: Issue number (number, required)
802-
- `owner`: Repository owner (string, required)
803-
- `repo`: Repository name (string, required)
804-
805818
- **get_label** - Get a specific label from a repository.
806819
- **Required OAuth Scopes**: `repo`
807820
- `name`: Label name. (string, required)
@@ -1084,11 +1097,12 @@ The following sets of tools are available:
10841097
Possible options:
10851098
1. get - Get details of a specific pull request.
10861099
2. get_diff - Get the diff of a pull request.
1087-
3. get_status - Get status of a head commit in a pull request. This reflects status of builds and checks.
1100+
3. get_status - Get combined commit status of a head commit in a pull request.
10881101
4. get_files - Get the list of files changed in a pull request. Use with pagination parameters to control the number of results returned.
10891102
5. get_review_comments - Get review threads on a pull request. Each thread contains logically grouped review comments made on the same code location during pull request reviews. Returns threads with metadata (isResolved, isOutdated, isCollapsed) and their associated comments. Use cursor-based pagination (perPage, after) to control results.
10901103
6. get_reviews - Get the reviews on a pull request. When asked for review comments, use get_review_comments method.
10911104
7. get_comments - Get comments on a pull request. Use this if user doesn't specifically want review comments. Use with pagination parameters to control the number of results returned.
1105+
8. get_check_runs - Get check runs for the head commit of a pull request. Check runs are the individual CI/CD jobs and checks that run on the PR.
10921106
(string, required)
10931107
- `owner`: Repository owner (string, required)
10941108
- `page`: Page number for pagination (min 1) (number, optional)
@@ -1106,12 +1120,6 @@ The following sets of tools are available:
11061120
- `pullNumber`: Pull request number (number, required)
11071121
- `repo`: Repository name (string, required)
11081122

1109-
- **request_copilot_review** - Request Copilot review
1110-
- **Required OAuth Scopes**: `repo`
1111-
- `owner`: Repository owner (string, required)
1112-
- `pullNumber`: Pull request number (number, required)
1113-
- `repo`: Repository name (string, required)
1114-
11151123
- **search_pull_requests** - Search pull requests
11161124
- **Required OAuth Scopes**: `repo`
11171125
- `order`: Sort order (string, optional)

cmd/github-mcp-server/main.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,14 @@ var (
6161
}
6262
}
6363

64+
// Parse excluded tools (similar to tools)
65+
var excludeTools []string
66+
if viper.IsSet("exclude_tools") {
67+
if err := viper.UnmarshalKey("exclude_tools", &excludeTools); err != nil {
68+
return fmt.Errorf("failed to unmarshal exclude-tools: %w", err)
69+
}
70+
}
71+
6472
// Parse enabled features (similar to toolsets)
6573
var enabledFeatures []string
6674
if viper.IsSet("features") {
@@ -85,6 +93,7 @@ var (
8593
ContentWindowSize: viper.GetInt("content-window-size"),
8694
LockdownMode: viper.GetBool("lockdown-mode"),
8795
InsidersMode: viper.GetBool("insiders"),
96+
ExcludeTools: excludeTools,
8897
RepoAccessCacheTTL: &ttl,
8998
}
9099
return ghmcp.RunStdioServer(stdioServerConfig)
@@ -126,6 +135,7 @@ func init() {
126135
// Add global flags that will be shared by all commands
127136
rootCmd.PersistentFlags().StringSlice("toolsets", nil, github.GenerateToolsetsHelp())
128137
rootCmd.PersistentFlags().StringSlice("tools", nil, "Comma-separated list of specific tools to enable")
138+
rootCmd.PersistentFlags().StringSlice("exclude-tools", nil, "Comma-separated list of tool names to disable regardless of other settings")
129139
rootCmd.PersistentFlags().StringSlice("features", nil, "Comma-separated list of feature flags to enable")
130140
rootCmd.PersistentFlags().Bool("dynamic-toolsets", false, "Enable dynamic toolsets")
131141
rootCmd.PersistentFlags().Bool("read-only", false, "Restrict the server to read-only operations")
@@ -147,6 +157,7 @@ func init() {
147157
// Bind flag to viper
148158
_ = viper.BindPFlag("toolsets", rootCmd.PersistentFlags().Lookup("toolsets"))
149159
_ = viper.BindPFlag("tools", rootCmd.PersistentFlags().Lookup("tools"))
160+
_ = viper.BindPFlag("exclude_tools", rootCmd.PersistentFlags().Lookup("exclude-tools"))
150161
_ = viper.BindPFlag("features", rootCmd.PersistentFlags().Lookup("features"))
151162
_ = viper.BindPFlag("dynamic_toolsets", rootCmd.PersistentFlags().Lookup("dynamic-toolsets"))
152163
_ = viper.BindPFlag("read-only", rootCmd.PersistentFlags().Lookup("read-only"))

docs/insiders-features.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
# Insiders Features
2+
3+
Insiders Mode gives you access to experimental features in the GitHub MCP Server. These features may change, evolve, or be removed based on community feedback.
4+
5+
We created this mode to have a way to roll out experimental features and collect feedback. So if you are using Insiders, please don't hesitate to share your feedback with us!
6+
7+
> [!NOTE]
8+
> Features in Insiders Mode are experimental.
9+
10+
## Enabling Insiders Mode
11+
12+
| Method | Remote Server | Local Server |
13+
|--------|---------------|--------------|
14+
| URL path | Append `/insiders` to the URL | N/A |
15+
| Header | `X-MCP-Insiders: true` | N/A |
16+
| CLI flag | N/A | `--insiders` |
17+
| Environment variable | N/A | `GITHUB_INSIDERS=true` |
18+
19+
For configuration examples, see the [Server Configuration Guide](./server-configuration.md#insiders-mode).
20+
21+
---
22+
23+
## MCP Apps
24+
25+
[MCP Apps](https://modelcontextprotocol.io/docs/extensions/apps) is an extension to the Model Context Protocol that enables servers to deliver interactive user interfaces to end users. Instead of returning plain text that the LLM must interpret and relay, tools can render forms, profiles, and dashboards right in the chat using MCP Apps.
26+
27+
This means you can interact with GitHub visually: fill out forms to create issues, see user profiles with avatars, open pull requests — all without leaving your agent chat.
28+
29+
### Supported tools
30+
31+
The following tools have MCP Apps UIs:
32+
33+
| Tool | Description |
34+
|------|-------------|
35+
| `get_me` | Displays your GitHub user profile with avatar, bio, and stats in a rich card |
36+
| `issue_write` | Opens an interactive form to create or update issues |
37+
| `create_pull_request` | Provides a full PR creation form to create a pull request (or a draft pull request) |
38+
39+
### Client requirements
40+
41+
MCP Apps requires a host that supports the [MCP Apps extension](https://modelcontextprotocol.io/docs/extensions/apps). Currently tested and working with:
42+
43+
- **VS Code Insiders** — enable via the `chat.mcp.apps.enabled` setting
44+
- **Visual Studio Code** — enable via the `chat.mcp.apps.enabled` setting

0 commit comments

Comments
 (0)