Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
59fa9a7
Add optional `rationale` parameter to `update_issue_type` tool (#2458)
alondahari May 13, 2026
9ad99c5
Add ifc label for search_issues tool (#2456)
gokhanarkan May 13, 2026
883f58d
Add ifc label for issue_read tool (#2457)
gokhanarkan May 13, 2026
3a4bc26
Add ifc label for search_repositories tool (#2459)
gokhanarkan May 13, 2026
fbf68b2
feat: return minimal code search results with text match snippets (#2…
SamMorrowDrums May 14, 2026
39d86b8
Replace ingress IFC reader list with private marker (#2478)
gokhanarkan May 14, 2026
b8be4c1
Document Copilot Spaces PAT requirements
Bestra May 14, 2026
46d220f
Add tool to list repo collaborators (#2477)
JoannaaKL May 15, 2026
8a48d07
feat: Add tool for discussion comment write operations (#2427)
RossTarrant May 15, 2026
1861a35
Upgrade go-github from v82 to v87 (#2452)
iulia-b May 18, 2026
f4b95e6
build(deps): bump golang from 1.25.9-alpine to 1.25.10-alpine (#2455)
dependabot[bot] May 18, 2026
8d81376
build(deps): bump goreleaser/goreleaser-action from 6.4.0 to 7.2.1 (#…
dependabot[bot] May 18, 2026
8af3431
build(deps): bump docker/login-action from 4.0.0 to 4.1.0 (#2395)
dependabot[bot] May 18, 2026
c471ae9
build(deps): bump sigstore/cosign-installer from 4.1.0 to 4.1.2 (#2394)
dependabot[bot] May 18, 2026
07a12f0
build(deps): bump github.com/google/jsonschema-go from 0.4.2 to 0.4.3…
dependabot[bot] May 18, 2026
0d560e7
build(deps): bump actions/attest-build-provenance from 3 to 4 (#2123)
dependabot[bot] May 18, 2026
0725cd9
build(deps): bump actions/setup-node from 4 to 6 (#2015)
dependabot[bot] May 18, 2026
fb8d48b
build(deps): bump node from 20-alpine to 26-alpine (#2013)
dependabot[bot] May 18, 2026
ea9d0c8
build(deps): bump hono (#2097)
dependabot[bot] May 18, 2026
2a6229f
build(deps): bump ui dependencies to clear security advisories
SamMorrowDrums May 18, 2026
6c56224
build(deps): declare Node >=20 engine requirement for /ui
SamMorrowDrums May 18, 2026
0ef8f97
feat(ui): opt into ext-apps autoResize and dev-mode strict
SamMorrowDrums May 18, 2026
91336dc
build(deps): bump distroless/base-debian12 from `9dce90e` to `58695f4…
dependabot[bot] May 19, 2026
de2f173
build(deps): bump reproducible-containers/buildkit-cache-dance (#2500)
dependabot[bot] May 19, 2026
66ec076
build(deps): bump goreleaser/goreleaser-action from 7.2.1 to 7.2.2 (#…
dependabot[bot] May 19, 2026
d4e1231
build(deps): bump github.com/modelcontextprotocol/go-sdk from 1.5.1-0…
dependabot[bot] May 19, 2026
7e394af
chore(ui): migrate vite 6 → 8, plugin-react 4 → 6; cache UI build in …
SamMorrowDrums May 19, 2026
c88d2ec
fix: guard CompletionsHandler against nil params/ref (#2502)
SamMorrowDrums May 19, 2026
f21dcd3
fix(ui): advertise get_me as an app via _meta.ui.visibility (#2503)
SamMorrowDrums May 19, 2026
e4309fa
Merge branch 'main' into kelsey/list-issues-field-values
kelsey-myers May 19, 2026
6a2d604
Add field_values to search_issues results
kelsey-myers May 19, 2026
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
38 changes: 38 additions & 0 deletions .github/actions/build-ui/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
name: Build UI
description: Restore cached UI HTML artifacts, or set up Node and run script/build-ui on cache miss.

runs:
using: composite
steps:
- name: Cache UI artifacts
id: cache-ui
uses: actions/cache@v5
with:
path: |
pkg/github/ui_dist/get-me.html
pkg/github/ui_dist/issue-write.html
pkg/github/ui_dist/pr-write.html
key: ui-dist-v1-${{ hashFiles('ui/package-lock.json', 'ui/package.json', 'ui/index.html', 'ui/tsconfig*.json', 'ui/vite.config.ts', 'ui/src/**', 'ui/scripts/**') }}
enableCrossOsArchive: true

- name: Set up Node.js
if: steps.cache-ui.outputs.cache-hit != 'true'
uses: actions/setup-node@v6
with:
node-version: "20"
cache: npm
cache-dependency-path: ui/package-lock.json

- name: Build UI
if: steps.cache-ui.outputs.cache-hit != 'true'
shell: bash
run: script/build-ui

- name: Report UI cache status
shell: bash
run: |
if [ "${{ steps.cache-ui.outputs.cache-hit }}" = "true" ]; then
echo "UI artifacts restored from cache (skipped build)."
else
echo "UI artifacts rebuilt from source."
fi
8 changes: 4 additions & 4 deletions .github/workflows/code-scanning.yml
Original file line number Diff line number Diff line change
Expand Up @@ -78,17 +78,17 @@ jobs:
go-version: ${{ fromJSON(steps.resolve-environment.outputs.environment).configuration.go.version }}
cache: false

- name: Set up Node.js
if: matrix.language == 'go' || matrix.language == 'javascript'
uses: actions/setup-node@v4
- name: Set up Node.js (for JavaScript CodeQL)
if: matrix.language == 'javascript'
uses: actions/setup-node@v6
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/package-lock.json

- name: Build UI
if: matrix.language == 'go'
run: script/build-ui
uses: ./.github/actions/build-ui

- name: Autobuild
uses: github/codeql-action/autobuild@v4
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/docker-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
# https://github.com/sigstore/cosign-installer
- name: Install cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@ba7bc0a3fef59531c69a25acd34668d6d3fe6f22 #v4.1.0
uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 #v4.1.2
with:
cosign-release: "v2.2.4"

Expand All @@ -60,7 +60,7 @@ jobs:
# https://github.com/docker/login-action
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4.0.0
uses: docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121 # v4.1.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
Expand Down Expand Up @@ -93,7 +93,7 @@ jobs:
key: ${{ runner.os }}-go-build-cache-${{ hashFiles('**/go.sum') }}

- name: Inject go-build-cache
uses: reproducible-containers/buildkit-cache-dance@1b8ab18fbda5ad3646e3fcc9ed9dd41ce2f297b4 # v3.3.2
uses: reproducible-containers/buildkit-cache-dance@5422eac04292c961a382e0f584ea0f03ad9da723 # v3.4.0
with:
cache-map: |
{
Expand Down
9 changes: 1 addition & 8 deletions .github/workflows/docs-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,8 @@ jobs:
- name: Checkout code
uses: actions/checkout@v6

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/package-lock.json

- name: Build UI
run: script/build-ui
uses: ./.github/actions/build-ui

- name: Set up Go
uses: actions/setup-go@v6
Expand Down
10 changes: 1 addition & 9 deletions .github/workflows/go.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,8 @@ jobs:
- name: Check out code
uses: actions/checkout@v6

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/package-lock.json

- name: Build UI
shell: bash
run: script/build-ui
uses: ./.github/actions/build-ui

- name: Set up Go
uses: actions/setup-go@v6
Expand Down
13 changes: 3 additions & 10 deletions .github/workflows/goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,8 @@ jobs:
- name: Check out code
uses: actions/checkout@v6

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/package-lock.json

- name: Build UI
run: script/build-ui
uses: ./.github/actions/build-ui

- name: Set up Go
uses: actions/setup-go@v6
Expand All @@ -35,7 +28,7 @@ jobs:
run: go mod download

- name: Run GoReleaser
uses: goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a
uses: goreleaser/goreleaser-action@5daf1e915a5f0af01ddbcd89a43b8061ff4f1a89
with:
distribution: goreleaser
# GoReleaser version
Expand All @@ -47,7 +40,7 @@ jobs:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Generate signed build provenance attestations for workflow artifacts
uses: actions/attest-build-provenance@v3
uses: actions/attest-build-provenance@v4
with:
subject-path: |
dist/*.tar.gz
Expand Down
9 changes: 1 addition & 8 deletions .github/workflows/license-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,15 +32,8 @@ jobs:
GH_TOKEN: ${{ github.token }}
run: gh pr checkout ${{ github.event.pull_request.number }}

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/package-lock.json

- name: Build UI
run: script/build-ui
uses: ./.github/actions/build-ui

- name: Set up Go
uses: actions/setup-go@v6
Expand Down
7 changes: 1 addition & 6 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: ui/package-lock.json
- name: Build UI
run: script/build-ui
uses: ./.github/actions/build-ui
- uses: actions/setup-go@v6
with:
go-version: '1.25'
Expand Down
7 changes: 1 addition & 6 deletions .github/workflows/mcp-diff.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,8 @@ jobs:
with:
fetch-depth: 0

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'

- name: Build UI
run: script/build-ui
uses: ./.github/actions/build-ui

- name: Run MCP Server Diff
uses: SamMorrowDrums/mcp-server-diff@v2.3.5
Expand Down
6 changes: 3 additions & 3 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
FROM node:20-alpine@sha256:09e2b3d9726018aecf269bd35325f46bf75046a643a66d28360ec71132750ec8 AS ui-build
FROM node:26-alpine@sha256:e71ac5e964b9201072425d59d2e876359efa25dc96bb1768cb73295728d6e4ea AS ui-build
WORKDIR /app
COPY ui/package*.json ./ui/
RUN cd ui && npm ci
Expand All @@ -7,7 +7,7 @@ COPY ui/ ./ui/
RUN mkdir -p ./pkg/github/ui_dist && \
cd ui && npm run build

FROM golang:1.25.9-alpine@sha256:5caaf1cca9dc351e13deafbc3879fd4754801acba8653fa9540cea125d01a71f AS build
FROM golang:1.25.10-alpine@sha256:8d22e29d960bc50cd025d93d5b7c7d220b1ee9aa7a239b3c8f55a57e987e8d45 AS build
ARG VERSION="dev"

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

# Make a stage to run the app
FROM gcr.io/distroless/base-debian12@sha256:9dce90e688a57e59ce473ff7bc4c80bc8fe52d2303b4d99b44f297310bbd2210
FROM gcr.io/distroless/base-debian12@sha256:58695f439f772a00009c8f6be4c183f824c1f556d74b313c30900f167e4772f8

# Add required MCP server annotation
LABEL io.modelcontextprotocol.server.name="io.github.github/github-mcp-server"
Expand Down
31 changes: 31 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,23 @@ The following sets of tools are available:

<summary><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</summary>

- **discussion_comment_write** - Manage discussion comments
- **Required OAuth Scopes**: `repo`
- `body`: Comment content (required for 'add', 'reply', and 'update' methods) (string, optional)
- `commentNodeID`: The Node ID of the discussion comment (required for 'reply', 'update', 'delete', 'mark_answer', and 'unmark_answer' methods). For 'reply', this is the top-level comment to reply to; GitHub Discussions only support one level of nesting. (string, optional)
- `discussionNumber`: Discussion number (required for 'add' and 'reply' methods) (number, optional)
- `method`: Write operation to perform on a discussion comment.
Options are:
- 'add' - adds a new top-level comment to a discussion.
- 'reply' - replies to a top-level discussion comment (GitHub Discussions only support one level of nesting).
- 'update' - updates an existing discussion comment.
- 'delete' - deletes a discussion comment.
- 'mark_answer' - marks a discussion comment as the answer (Q&A only).
- 'unmark_answer' - unmarks a discussion comment as the answer (Q&A only).
(string, required)
- `owner`: Repository owner (required for 'add' and 'reply' methods) (string, optional)
- `repo`: Repository name (required for 'add' and 'reply' methods) (string, optional)

- **get_discussion** - Get discussion
- **Required OAuth Scopes**: `repo`
- `discussionNumber`: Discussion Number (number, required)
Expand All @@ -740,6 +757,7 @@ The following sets of tools are available:
- **Required OAuth Scopes**: `repo`
- `after`: Cursor for pagination. Use the endCursor from the previous page's PageInfo for GraphQL APIs. (string, optional)
- `discussionNumber`: Discussion Number (number, required)
- `includeReplies`: When true, each top-level comment will include its replies nested within it (up to 100 replies per comment, which is the GitHub API maximum). Defaults to false. (boolean, optional)
- `owner`: Repository owner (string, required)
- `perPage`: Results per page for pagination (min 1, max 100) (number, optional)
- `repo`: Repository name (string, required)
Expand Down Expand Up @@ -1256,6 +1274,14 @@ The following sets of tools are available:
- `perPage`: Results per page for pagination (min 1, max 100) (number, optional)
- `repo`: Repository name (string, required)

- **list_repository_collaborators** - List repository collaborators
- **Required OAuth Scopes**: `repo`
- `affiliation`: Filter by affiliation. Can be one of: 'outside' (outside collaborators), 'direct' (all with permissions regardless of org membership), 'all' (all collaborators). Default: 'all' (string, optional)
- `owner`: Repository owner (string, required)
- `page`: Page number for pagination (default 1, min 1) (number, optional)
- `perPage`: Results per page for pagination (default 30, min 1, max 100) (number, optional)
- `repo`: Repository name (string, required)

- **list_tags** - List tags
- **Required OAuth Scopes**: `repo`
- `owner`: Repository owner (string, required)
Expand Down Expand Up @@ -1413,6 +1439,11 @@ The following sets of tools are available:

<summary>Copilot Spaces</summary>

- **Authentication note**
- Fine-grained PATs are not hidden by classic PAT scope filtering, so these tools may still appear even when the token cannot use them.
- For org-owned spaces, fine-grained PATs must be installed on the owning organization and include `organization_copilot_spaces: read`.
- If an org-owned space contains repository-backed resources, the token must also have access to every referenced repository or the space may be treated as not found.

- **get_copilot_space** - Get Copilot Space
- `owner`: The owner of the space. (string, required)
- `name`: The name of the space. (string, required)
Expand Down
2 changes: 1 addition & 1 deletion e2e/e2e_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
"github.com/github/github-mcp-server/internal/ghmcp"
"github.com/github/github-mcp-server/pkg/github"
"github.com/github/github-mcp-server/pkg/translations"
gogithub "github.com/google/go-github/v82/github"
gogithub "github.com/google/go-github/v87/github"
"github.com/modelcontextprotocol/go-sdk/mcp"
"github.com/stretchr/testify/require"
)
Expand Down
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ go 1.25.0
require (
github.com/go-chi/chi/v5 v5.2.5
github.com/go-viper/mapstructure/v2 v2.5.0
github.com/google/go-github/v82 v82.0.0
github.com/google/jsonschema-go v0.4.2
github.com/google/go-github/v87 v87.0.0
github.com/google/jsonschema-go v0.4.3
github.com/josephburnett/jd/v2 v2.5.0
github.com/lithammer/fuzzysearch v1.1.8
github.com/microcosm-cc/bluemonday v1.0.27
github.com/modelcontextprotocol/go-sdk v1.5.1-0.20260403154220-27f29c1cef3b
github.com/modelcontextprotocol/go-sdk v1.6.0
github.com/muesli/cache2go v0.0.0-20221011235721-518229cd8021
github.com/shurcooL/githubv4 v0.0.0-20240727222349-48295856cce7
github.com/shurcooL/graphql v0.0.0-20230722043721-ed46e5a46466
Expand Down
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ github.com/golang-jwt/jwt/v5 v5.3.1/go.mod h1:fxCRLWMO43lRc8nhHWY6LGqRcf+1gQWArs
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/go-github/v82 v82.0.0 h1:OH09ESON2QwKCUVMYmMcVu1IFKFoaZHwqYaUtr/MVfk=
github.com/google/go-github/v82 v82.0.0/go.mod h1:hQ6Xo0VKfL8RZ7z1hSfB4fvISg0QqHOqe9BP0qo+WvM=
github.com/google/go-github/v87 v87.0.0 h1:9Ck3dcOxWJyfsN8tzdah4YvmqB/7ZsstMglv/PkOsl0=
github.com/google/go-github/v87 v87.0.0/go.mod h1:hGUoT5pwm/ck5uLL+wroSVQfg8mpe+buxllCcGV4VaM=
github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0=
github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU=
github.com/google/jsonschema-go v0.4.2 h1:tmrUohrwoLZZS/P3x7ex0WAVknEkBZM46iALbcqoRA8=
github.com/google/jsonschema-go v0.4.2/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
github.com/google/jsonschema-go v0.4.3 h1:/DBOLZTfDow7pe2GmaJNhltueGTtDKICi8V8p+DQPd0=
github.com/google/jsonschema-go v0.4.3/go.mod h1:r5quNTdLOYEz95Ru18zA0ydNbBuYoo9tgaYcxEYhJVE=
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
Expand All @@ -39,8 +39,8 @@ github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8
github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4=
github.com/microcosm-cc/bluemonday v1.0.27 h1:MpEUotklkwCSLeH+Qdx1VJgNqLlpY2KXwXFM08ygZfk=
github.com/microcosm-cc/bluemonday v1.0.27/go.mod h1:jFi9vgW+H7c3V0lb6nR74Ib/DIB5OBs92Dimizgw2cA=
github.com/modelcontextprotocol/go-sdk v1.5.1-0.20260403154220-27f29c1cef3b h1:mB8zdpP8SX1TEqnEZpV2hHD30EQXivsZl4AP9hgm7F8=
github.com/modelcontextprotocol/go-sdk v1.5.1-0.20260403154220-27f29c1cef3b/go.mod h1:gggDIhoemhWs3BGkGwd1umzEXCEMMvAnhTrnbXJKKKA=
github.com/modelcontextprotocol/go-sdk v1.6.0 h1:PPLS3kn7WtOEnR+Af4X5H96SG0qSab8R/ZQT/HkhPkY=
github.com/modelcontextprotocol/go-sdk v1.6.0/go.mod h1:kzm3kzFL1/+AziGOE0nUs3gvPoNxMCvkxokMkuFapXQ=
github.com/muesli/cache2go v0.0.0-20221011235721-518229cd8021 h1:31Y+Yu373ymebRdJN1cWLLooHH8xAr0MhKTEJGV/87g=
github.com/muesli/cache2go v0.0.0-20221011235721-518229cd8021/go.mod h1:WERUkUryfUWlrHnFSO/BEUZ+7Ns8aZy7iVOGewxKzcc=
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
Expand Down
Loading
Loading