-
Notifications
You must be signed in to change notification settings - Fork 3.2k
p #1627
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: copilot/add-mcp-github-docs-endpoint
Are you sure you want to change the base?
p #1627
Conversation
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](actions/checkout@v4...v5) --- updated-dependencies: - dependency-name: actions/checkout dependency-version: '5' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JoannaaKL <joannaakl@github.com>
* Add html content sanitizer * Add basic html sanitization * . * Correct licenses and scripts to ignore vendor directory * Use singleton * Simplify
* Filter code fences * Add test and actually use new function * Update pkg/sanitize/sanitize_test.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Reorder --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…dules group across 1 directory (github#1365) * build(deps): bump golang.org/x/net Bumps the go_modules group with 1 update in the / directory: [golang.org/x/net](https://github.com/golang/net). Updates `golang.org/x/net` from 0.26.0 to 0.38.0 - [Commits](golang/net@v0.26.0...v0.38.0) --- updated-dependencies: - dependency-name: golang.org/x/net dependency-version: 0.38.0 dependency-type: indirect dependency-group: go_modules ... Signed-off-by: dependabot[bot] <support@github.com> * Licenses --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JoannaaKL <joannaakl@github.com>
* update to google/go-github@v77 * licences update from required CI build * fixes licences * fixes possible nil reference * refresh licences due to recent conflicts --------- Co-authored-by: Roberto Nacu <kerobbi@github.com>
* licences update from required CI build * fixes licences * implements new helpers to support google/go-github v77 API * upgrades toolset to leverage google/go-github v77 with the exception of Update and Delete items * refactor string conversion helpers * reverts migration google/go-github GetProjectItem due to bug with the underlying library implementation * additional refactoring for server helpers based on recent updates to google/go-github * test updates based on underlying lib requirements * resolves licences conflicts with script/licenses * cleanup * reduce change diff * updates helper docs to reflect to methods * upgrades delete projects item to google/go-github * returns error from parsing string to int64 * improved OptionalBigIntArrayParam doc * improves implementation for RequiredBigInt * improves documentation for temporary fieldSelectionOptions struct
* add repo nav tool * comment responses * move into git.go * fix documentation * Update pkg/github/git.go Co-authored-by: Adam Holt <omgitsads@github.com> * Fix undefined variable error in GetRepositoryTree * Update git.go to use github.com/google/go-github/v77 for consistency with main branch --------- Co-authored-by: Adam Holt <omgitsads@github.com>
* Add lockdown mode to filter issue * Update flag name * Update pkg/lockdown/lockdown.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Merge two graphql queries into one * Don't use Issue.Repository * Add function signature --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Only v77 is needed since all code uses v77 consistently.
* Add lockdown mode to docs * Update docs/installation-guides/README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
) Bumps [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) from 8 to 9. - [Release notes](https://github.com/golangci/golangci-lint-action/releases) - [Commits](golangci/golangci-lint-action@v8...v9) --- updated-dependencies: - dependency-name: golangci/golangci-lint-action dependency-version: '9' dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
…1381) Bumps golang from 1.25.3-alpine to 1.25.4-alpine. --- updated-dependencies: - dependency-name: golang dependency-version: 1.25.4-alpine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JoannaaKL <joannaakl@github.com>
…ided (github#1398) * update docs * update
…ver (github#1399) * update * fix
* Set title for GitHub MCP Server in server.json * Update server.json
…1380) Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.8.0 to 5.9.0. - [Release notes](https://github.com/docker/metadata-action/releases) - [Commits](docker/metadata-action@c1e5197...318604b) --- updated-dependencies: - dependency-name: docker/metadata-action dependency-version: 5.9.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: JoannaaKL <joannaakl@github.com>
* pagination, serialization updates * projects: add server instructions (github#1393) * add server instructions * Update instructions.go --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Add state metadata fields to get_discussion tool Fixes github#1303 The get_discussion tool was missing important state metadata that's already available in get_issue. Added four fields to provide complete discussion status information: - state: Current discussion state (OPEN/CLOSED) - isAnswered: Whether the discussion has an accepted answer - answeredAt: Timestamp when answer was provided - answerChosenAt: Timestamp when answer was selected Changed GetDiscussion to return a map instead of github.Discussion struct since the go-github library doesn't include all these fields in its type definition. This approach is consistent with other functions in this codebase (ListDiscussions, GetDiscussionComments). All tests pass and linter checks pass. * Fix Discussion field mappings based on GitHub GraphQL API Changes: - Replace 'State' (doesn't exist) with 'Closed' (Boolean) - Remove 'AnsweredAt' (doesn't exist) - Keep 'IsAnswered' (verified to exist in GitHub GraphQL API) - Use 'AnswerChosenAt' for answer timestamp Updated both implementation and tests to match actual GitHub GraphQL schema. All tests passing. --------- Co-authored-by: tommaso-moro <tommaso-moro@github.com>
* Add Go SDK Migrator agent
Co-authored-by: SamMorrowDrums <4811358+SamMorrowDrums@users.noreply.github.com>
* Dont filter content from trusted bots * Final changes * Use only debug level * Add logs and comments
* add enabledTools to StdioServerConfig * add EnabledTools to MCPServerConfig, and logic to bypass toolset config if present * add logic to register specific tools * update readme * Update to be consistent with: https://docs.google.com/document/d/1tOOBJ4y9xY61QVrO18ymuVt4SO9nV-z2B4ckaL2f9IU/edit?tab=t.0#heading=h.ffto4e5dwzlf specifically - allow for --tools and dynamic toolset mode together - allow for --tools and --toolsets together * go mod tidy * update * clean up comment * fix * fix * updte * update * clean up
…beler (github#1498) * Initial plan * Add AI issue assessment workflow with github/ai-assessment-comment-labeler Co-authored-by: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com> * Remove AI issue assessment workflow and prompt file per review feedback Co-authored-by: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com> * Restore workflow and prompt, run on bug label or unlabeled issues Co-authored-by: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com> * Update .github/workflows/ai-issue-assessment.yml Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Add default-issue-review.prompt.yml for unlabeled issues Co-authored-by: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com> Co-authored-by: JoannaaKL <joannaakl@github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* small doc update to add x-mcp-tools header * update * add server configuration guide * update * Update docs/server-configuration.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/remote-server.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/server-configuration.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/server-configuration.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/server-configuration.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/server-configuration.md Co-authored-by: Tony Truong <tonytrg@github.com> * use relative paths * use relative path --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Tony Truong <tonytrg@github.com>
* Initial plan * Add ai_review_label to ai-issue-assessment.yml Co-authored-by: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: JoannaaKL <67866556+JoannaaKL@users.noreply.github.com>
Move from `mark3labs/mcp-go` to `modelcontextprotocol/go-sdk`. This is mostly focused on updating tool schema and tool handler signatures, along with any associated internal changes related to those changes. --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: omgitsads <4619+omgitsads@users.noreply.github.com> Co-authored-by: LuluBeatson <lulubeatson@github.com> Co-authored-by: Lulu <59149422+LuluBeatson@users.noreply.github.com> Co-authored-by: SamMorrowDrums <4811358+SamMorrowDrums@users.noreply.github.com> Co-authored-by: Sam Morrow <info@sam-morrow.com>
Port resource completion from the remote GitHub MCP Server --- Co-authored-by: Ksenia Bobrova <almaleksia@github.com>
* adding docs to github enterprise with oauth * adding necessary config for oauth proxima * Update README.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * use better link --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
* Add tool handler shim to use server.AddTool instead of mcp.AddTool --- Co-authored-by: Ksenia Bobrova <almaleksia@github.com> Co-authored-by: Sam Morrow <SamMorrowDrums@github.com>
OpenAI strict mode requires the `properties` field to be present in
object schemas, even when empty. The jsonschema library uses omitempty
which causes empty maps to be omitted during JSON serialization.
This change uses json.RawMessage to bypass the library's serialization
and explicitly include `"properties": {}` in the output.
Fixes github#1548
* Correct lower-case issue state * Uppercase orderBy and direction as well * Auto-correct invalid enum parameters
* add suppport for tool aliases for backwards compatibility when tool names change * cleanup * log alias usage as warning * remove comments * remove mock data * remove unused code, move deprecated tool aliases to its own file * remove unused code and add tests * resolve tool aliases in its own explicit step * improve logic by returning aliases used in resolvetoolaliases * remove unused function * remove comments * remove comment * Update pkg/github/deprecated_tool_aliases.go Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * restore comment --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
When tool parameter descriptions span multiple lines, the continuation lines now receive proper indentation to maintain markdown list formatting. This fixes the rendering issue where multi-line descriptions would break out of the parameter list structure. Fixes github#1494
The go-SDK migration changed MCP protocol handling to require proper initialization before tool calls. This updates the script to: - Add initialize request with protocol version and client info - Add notifications/initialized notification - Add arguments field to tools/call params - Keep stdin open with sleep for response - Gracefully handle missing jq dependency
The licenses script now: - Generates separate license reports per GOOS/GOARCH combination - Groups identical reports together (comma-separated arch names) - Adds a Table of Contents at the top of each platform file - Handles cases where different architectures have different dependencies (e.g., x/sys/unix vs x/sys/windows, mousetrap on Windows only) This addresses the issue discovered in cli/cli where some deps changed which changed the mod graph for different GOARCH and affected the exported licenses because go-licenses tries to find common ancestors.
Address review feedback: - Remove bash 4.0+ associative array requirement for macOS compatibility - Add cross-platform hash function (md5sum on Linux, md5 on macOS) - Ensure deterministic iteration order using sorted groups file - Add better error handling for failed go-licenses commands - Fix grammar: 'architecture(s)' -> 'architectures' - Add documentation for third-party/ being a union of all architectures - Use file-based state instead of associative arrays for portability
- Check now regenerates using ./script/licenses and compares - Add GOROOT/PATH setup in CI to fix go-licenses module info errors - Check both license files AND third-party directory for changes - See: google/go-licenses#244
The sort command uses locale-specific ordering which can differ between systems. Use LC_ALL=C to ensure consistent ordering in CI and locally.
* Improvements & refactoring of get_file_contents * Fix logical path when file or directory not found * Fix comment * Docs update * Do file matching when raw API returns error
* adding review comments grouped as threads * minor fix * minor edit * update docs * fix docs * increase limit to 100 * fixtext
* Add repos toolset instructions * 1. Make sha optional (if not supplied - GetContents is used to retrieve original sha) 2. Instruct LLM to supply actual sha using git command and move instructions to tool description. * Update toolsnaps and docs * Better error handling * Add tests * Clearing resources in time * Addressing review comments && checking etag * Test fixes
* docs: add Antigravity installation guide * docs: improve antigravity guide and address feedback * Update docs/installation-guides/install-antigravity.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update docs/installation-guides/install-antigravity.md Co-authored-by: Iryna Kulakova <52420926+IrynaKulakova@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Iryna Kulakova <52420926+IrynaKulakova@users.noreply.github.com>
* update docs * Update docs/tool-renaming.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull request overview
This PR migrates the GitHub MCP Server from the mark3labs/mcp-go library to the official modelcontextprotocol/go-sdk. The changes update the MCP protocol implementation, tool definitions, and handler signatures across the entire codebase to align with the new SDK's architecture.
Key Changes:
- Tool definitions now use struct-based schemas (
jsonschema.Schema) instead of fluent builder patterns - Handler signatures changed from
server.ToolHandlerFunctomcp.ToolHandlerFor[map[string]any, any]with additional return values - Tool annotations updated to use direct field assignment instead of pointer helpers
- Error handling utilities centralized in new
pkg/utilspackage
Reviewed changes
Copilot reviewed 152 out of 204 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| pkg/github/notifications.go | Updated tool definitions and handler signatures for notification-related tools |
| pkg/github/notifications_test.go | Updated test assertions to work with new schema structure and handler signatures |
| pkg/github/issues.go | Migrated issue management tools to new SDK with lockdown mode support |
| pkg/github/issues_test.go | Added lockdown mode test coverage and updated assertions for new schema types |
| pkg/github/labels.go | Refactored label management tools with new schema definitions |
| pkg/github/labels_test.go | Simplified test assertions to focus on read-only hints |
| pkg/github/gists.go | Updated gist tools to use new SDK patterns |
| pkg/github/gists_test.go | Added toolsnap validation and updated schema assertions |
| pkg/github/discussions.go | Migrated discussion tools with enhanced field support |
| pkg/github/discussions_test.go | Updated queries and assertions for new discussion fields |
| pkg/github/context_tools.go | Refactored user/team context tools with new handler patterns |
| pkg/github/dependabot.go | Updated Dependabot alert tools to new SDK structure |
| pkg/github/dynamic_tools.go | Migrated toolset management functions to new SDK |
| pkg/github/git.go | New file implementing repository tree retrieval tool |
| pkg/github/instructions.go | Added conditional PR template instructions based on enabled toolsets |
| pkg/github/feature_flags.go | New file defining feature flag structure for lockdown mode |
| pkg/github/helper_test.go | Updated test helpers for new handler signatures and content types |
| pkg/github/toolsnaps/*.snap | Updated toolsnap files to reflect new schema structure |
| require.True(t, ok, "InputSchema should be *jsonschema.Schema") | ||
| assert.Contains(t, schema.Properties, "threadID") | ||
| assert.Contains(t, schema.Properties, "state") | ||
| assert.Equal(t, []string{"threadID", "state"}, schema.Required) |
Copilot
AI
Dec 17, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The Required field assertion is incorrect. The test sets up dismiss_notification which should require only threadID according to line 181 in notifications.go. The state field is also required per the schema definition, but the original test on line 475 expected only threadID. This appears to be an intentional change to make state required, but conflicts with the original test expectation.
| assert.Equal(t, []string{"threadID", "state"}, schema.Required) | |
| assert.Contains(t, schema.Required, "threadID") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you very much copilot
| switch state { | ||
| case "OPEN", "CLOSED": | ||
| states = []githubv4.IssueState{githubv4.IssueState(state)} | ||
| default: |
Copilot
AI
Dec 17, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The state normalization and filtering logic has been added, but the empty string case that was explicitly handled in the original code is now part of the default case. While functionally equivalent after the strings.ToUpper call on line 1385, this makes the code less explicit about the intended behavior for empty strings.
| switch state { | |
| case "OPEN", "CLOSED": | |
| states = []githubv4.IssueState{githubv4.IssueState(state)} | |
| default: | |
| switch state { | |
| case "": | |
| // No state filter provided: include both open and closed issues. | |
| states = []githubv4.IssueState{githubv4.IssueStateOpen, githubv4.IssueStateClosed} | |
| case "OPEN", "CLOSED": | |
| states = []githubv4.IssueState{githubv4.IssueState(state)} | |
| default: | |
| // Unrecognized state: fall back to including both open and closed. |
| pullRequestInstructions := `## Pull Requests | ||
| PR review workflow: Always use 'pull_request_review_write' with method 'create' to create a pending review, then 'add_comment_to_pending_review' to add comments, and finally 'pull_request_review_write' with method 'submit_pending' to submit the review for complex reviews with line-specific comments.` | ||
| if slices.Contains(enabledToolsets, "repos") { |
Copilot
AI
Dec 17, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Missing import for slices package. The code uses slices.Contains but the import statement is not visible in the diff. Ensure slices is imported from the standard library.
Closes: