---
schema_version: 1
route: /t/github-mcp-server.md
tool: "github-mcp-server"
---

# sincecutoff.com /t/github-mcp-server — GitHub MCP Server

- name: GitHub MCP Server
- kind: mcp
- children: none
- homepage: <https://github.com/github/github-mcp-server>

Changes to the tools coding agents drive, since a model's training cutoff, each linked to its first-party source. Check installed versions and limitations before acting; a cutoff date does not establish what a model knows.
Original editorial content: [Apache 2.0](https://sincecutoff.com/v1/data-license.txt), by [0xPatrick](https://0xpatrick.dev). Preserve applicable license and [NOTICE](https://sincecutoff.com/notice.txt) attribution when redistributing. Third-party source text and examples retain their own rights. [License scope and attribution](https://sincecutoff.com/v1/license.json).
To stay current, read the changes feed: [`/v1/changes.md?tool=github-mcp-server`](https://sincecutoff.com/v1/changes.md?tool=github-mcp-server) (or `.json`), adding `since=YYYY-MM-DD` for your training cutoff. Entries for registered children are included; the registry itself is `/v1/tools.json`. How to page and save your place: [llms.txt](https://sincecutoff.com/llms.txt).

### github-mcp-server adds granular reaction removal tools (2026-09-16)
- slug: github-mcp-server-adds-granular-reaction-removal-tools-14a1e5ee84ff
- score: 0.98

How to use it:

When removing a reaction from an issue, issue comment, or pull request review comment, call the matching granular reaction-removal tool with the repository identifiers and reaction ID (plus the issue number or comment ID).

Examples:

```
remove_issue_reaction({"owner":"<owner>","repo":"<repo>","issue_number":<issue_number>,"reaction_id":<reaction_id>})
```

```
remove_issue_comment_reaction({"owner":"<owner>","repo":"<repo>","comment_id":<comment_id>,"reaction_id":<reaction_id>})
```

```
remove_pull_request_review_comment_reaction({"owner":"<owner>","repo":"<repo>","comment_id":<comment_id>,"reaction_id":<reaction_id>})
```

- why_it_matters: Remove a reaction from an issue, issue comment, or pull request review comment using the granular issues and pull requests toolsets.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.12.2>, <https://github.com/github/github-mcp-server/blob/v1.12.2/docs/feature-flags.md>
- gotchas: "Version: v1.12.2"; "remove_issue_reaction.owner (required): Repository owner (username or organization)."; "remove_issue_reaction.repo (required): Repository name."; "remove_issue_reaction.issue_number (required): Issue number."; "remove_issue_reaction.reaction_id (required): Reaction ID to remove."; "remove_issue_comment_reaction.owner (required): Repository owner (username or organization)."; "remove_issue_comment_reaction.repo (required): Repository name."; "remove_issue_comment_reaction.comment_id (required): Issue or pull request comment ID."; "remove_issue_comment_reaction.reaction_id (required): Reaction ID to remove."; "remove_pull_request_review_comment_reaction.owner (required): Repository owner (username or organization)."; "remove_pull_request_review_comment_reaction.repo (required): Repository name."; "remove_pull_request_review_comment_reaction.comment_id (required): Numeric pull request review comment ID; use the number from a #discussion_r... anchor, not the GraphQL thread node ID (PRRT_...)."; "remove_pull_request_review_comment_reaction.reaction_id (required): Reaction ID to remove."; "Prerequisite: These tools are listed under the `issues_granular` and `pull_requests_granular` toolsets."; "Prerequisite: Each tool lists the required OAuth Challenge Scope `repo`."; "The tools are added to the granular issues and pull requests toolsets."

### github-mcp-server adds update_issue_comment tool (2026-09-16)
- slug: github-mcp-server-adds-update-issue-comment-tool-40c4df6d2657
- score: 0.98

How to use it:

When maintaining a repository issue, use `update_issue_comment` to replace an existing issue or pull request conversation comment’s content.

Examples:

```
update_issue_comment({"owner":"<owner>","repo":"<repo>","comment_id":<comment_id>,"body":"<new comment content>"})
```

- why_it_matters: Update an issue comment while maintaining a repository issue.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.12.2>, <https://github.com/github/github-mcp-server/blob/main/README.md>
- gotchas: "Version: v1.12.2"; "owner (required): Repository owner."; "repo (required): Repository name."; "comment_id (required): Numeric ID of the issue or pull request conversation comment to update; do not use a pull request review comment ID."; "body (required): New comment content."; "Prerequisite: OAuth scope: `repo`."

### github-mcp-server pins merge_pull_request with expectedHeadSha (2026-09-03)
- slug: github-mcp-server-pins-merge-pull-request-with-expectedheadsha-945b8ae63e15
- score: 0.98

How to use it:

When merging a pull request only if its head still matches a known commit, call `merge_pull_request` with that commit’s SHA in `expectedHeadSha`.

Examples:

```
{"owner":"<owner>","repo":"<repo>","pullNumber":<pull_number>,"expectedHeadSha":"<expected_head_sha>"}
```

- why_it_matters: Merge a pull request only if its head still matches the expected commit.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.12.0>, <https://github.com/github/github-mcp-server/blob/v1.12.0/README.md>
- gotchas: "Version: v1.12.0"; "owner (required): Repository owner."; "repo (required): Repository name."; "pullNumber (required): Pull request number."; "expectedHeadSha: Expected SHA of the pull request’s HEAD ref."; "commit_message: Extra detail for the merge commit."; "commit_title: Title for the merge commit."; "merge_method: Merge method."; "Prerequisite: The tool requires OAuth challenge scope `repo`."; "The release does not specify the behavior when the expected head SHA does not match."

### github-mcp-server creates parent issues and sub-issues atomically (2026-08-25)
- slug: github-mcp-server-creates-parent-issues-and-sub-issues-atomically-0544791d694a
- score: 0.95

How to use it:

When creating an issue as a sub-issue, call `issue_write` with `method: "create"` and `parent_issue_number`; the server creates and attaches it in the same operation. For a parent in another repository, also provide both `parent_owner` and `parent_repo`.

Examples:

```
issue_write({"method":"create","owner":"<owner>","repo":"<repo>","title":"<sub-issue title>","parent_issue_number":<parent issue number>})
```

```
issue_write({"method":"create","owner":"<owner>","repo":"<repo>","title":"<sub-issue title>","parent_issue_number":<parent issue number>,"parent_owner":"<parent owner>","parent_repo":"<parent repo>"})
```

- why_it_matters: Create a GitHub issue and its sub-issues as part of an issue workflow.
- before: The PR states that creating and attaching an issue previously required separate calls, leaving a partial-failure window.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.11.0>, <https://github.com/github/github-mcp-server/pull/3134>, <https://github.com/github/github-mcp-server?locale=en-US>
- gotchas: "Version: v1.11.0"; "method (required): Use `create` to create a new issue."; "owner (required): Owner of the repository where the new issue is created."; "repo (required): Repository where the new issue is created."; "title (required): Title for the issue being created."; "parent_issue_number: Parent issue number; used with `method: create` to attach the new issue in the same operation. Cannot be combined with `issue_fields`."; "parent_owner: Parent repository owner. Provide together with `parent_repo`; omit both to use `owner` and `repo`."; "parent_repo: Parent repository name. Provide together with `parent_owner`; omit both to use `owner` and `repo`."; "Prerequisite: The tool documents OAuth scope `repo`."

### github-mcp-server adds gated find_duplicate tool (2026-08-10)
- slug: github-mcp-server-adds-gated-find-duplicate-tool-5b6800a565b5
- score: 0.91

How to use it:

When reviewing an issue, enable `duplicate_detection` and call `find_duplicate` with the repository owner, name, and issue number. The tool returns ranked duplicate candidates; optional threshold and pagination parameters are available.

Examples:

```
find_duplicate({"owner":"<owner>","repo":"<repo>","issue_number":<issue_number>})
```

```
github-mcp-server --features=duplicate_detection
```

```
X-MCP-Features: duplicate_detection
```

- why_it_matters: Check for duplicate issues when reviewing issues in a repository with duplicate detection enabled.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.9.0>, <https://github.com/github/github-mcp-server/blob/v1.9.0/docs/feature-flags.md>
- gotchas: "Version: v1.9.0"; "duplicate_detection (required): Feature flag that enables the non-default `find_duplicate` tool."; "owner (required): Repository owner."; "repo (required): Repository name."; "issue_number (required): Number of the existing issue to find duplicates for."; "confidence_threshold: Minimum candidate similarity threshold; higher values are stricter. Omitted uses the API's high-precision default; the API defines the scale."; "page: Pagination page number; minimum 1."; "perPage: Results per page; minimum 1, maximum 100."; "Prerequisite: The tool requires the `repo` OAuth scope."; "Prerequisite: Enable the flag on a local server with `--features=<flag>` or `GITHUB_FEATURES=<flag>`, or on a remote server with the `X-MCP-Features` header."; "find_duplicate is non-default and gated by the duplicate_detection flag."

### github-mcp-server supports singular Project Issue Field updates (2026-08-10)
- slug: github-mcp-server-supports-singular-project-issue-field-updates-5a13dc6255b2
- score: 0.96

How to use it:

When updating one field on a Project issue, call `projects_write` with `method: "update_project_item"` and a single `updated_field` using the field name and value. Identify the item by `item_id` or by its repository owner, repository name, and issue number.

Examples:

```
{"method":"update_project_item","owner":"<project-owner>","project_number":<project-number>,"item_id":<item-id>,"updated_field":{"name":"<field-name>","value":"<value>"}}
```

- why_it_matters: Update one Project Issue Field value in a GitHub project.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.9.0>, <https://raw.githubusercontent.com/github/github-mcp-server/v1.9.0/pkg/github/projects.go>, <https://github.com/github/github-mcp-server/pull/2941>
- gotchas: "Version: v1.9.0"; "method (required): Set to `update_project_item`."; "owner (required): Project owner’s user or organization login."; "project_number (required): Project number for this update."; "item_id (required): Project item ID. Use this or the complete issue-reference set: `item_owner`, `item_repo`, and `issue_number`."; "item_owner (required): Repository owner when resolving the item by issue; use with `item_repo` and `issue_number`, instead of `item_id`."; "item_repo (required): Repository name when resolving the item by issue; use with `item_owner` and `issue_number`, instead of `item_id`."; "issue_number (required): Issue number when resolving the item; use with `item_owner` and `item_repo`, instead of `item_id`."; "updated_field (required): Object containing the field selector and value. For a name-based update, provide `name` and `value`."; "updated_field.name (required): Project field name; matching is case-insensitive. For SINGLE_SELECT fields, this name form accepts option names."; "updated_field.value (required): Value to apply; `null` clears the field. Singular Issue Field updates support TEXT, NUMBER, DATE, and SINGLE_SELECT values; single-select option-name matching is case-insensitive."; "Prerequisite: Use github-mcp-server v1.9.0 or later; the release includes singular Project Issue Field updates."; "Prerequisite: The tool requires the `project` OAuth scope."

### github-mcp-server adds batched update_project_items GraphQL writes (2026-07-30)
- slug: github-mcp-server-adds-batched-update-project-items-graphql-writes-193e6855227a
- score: 0.91

How to use it:

When multiple items in one project need the same field update, call `projects_write` with `method: "update_project_items"` and the item references and field value.

Examples:

```
{"method":"update_project_items","owner":"<owner>","project_number":<project-number>,"items":[{"node_id":"<project-item-node-id>"}],"updated_field":{"name":"<field-name>","value":"<value>"}}
```

- why_it_matters: Update multiple project items through the server's project workflow.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.8.0>, <https://raw.githubusercontent.com/github/github-mcp-server/v1.8.0/pkg/github/projects.go>
- gotchas: "Version: v1.8.0"; "method (required): Set to `update_project_items`."; "owner (required): Project owner’s user or organization login."; "project_number (required): Number of the project to update."; "items (required): Up to 50 item references. Each uses exactly one variant: `node_id`, numeric `item_id`, or `item_owner` + `item_repo` + `issue_number`."; "updated_field (required): The single field/value applied to every item. Use `{ \"id\": <field-id>, \"value\": <value> }` or `{ \"name\": \"<field-name>\", \"value\": <value> }`; use `null` to clear the field."; "owner_type: Set to `user` or `org`; if omitted, the server detects the owner type."; "Prerequisite: The `projects_write` tool requires the `project` OAuth scope."

### github-mcp-server tools support response field filtering by default (2026-07-30)
- slug: github-mcp-server-tools-support-response-field-filtering-by-default-aecadd0dc1bb
- score: 0.97

How to use it:

When a supported GitHub MCP tool returns more data than you need, pass its optional `fields` array with the response fields to keep. The parameter is available by default in v1.8.0; only selected tools support it.

Examples:

```
list_issues({"owner":"<owner>","repo":"<repo>","fields":["title","number","state"]})
```

```
search_code({"query":"<search query>","fields":["name","path"]})
```

```
get_file_contents({"owner":"<owner>","repo":"<repo>","path":"<directory>","fields":["name","type"]})
```

- why_it_matters: Reduce the response size when calling a supported tool while working with GitHub data.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.8.0>, <https://github.com/github/github-mcp-server/blob/v1.8.0/README.md>
- gotchas: "Version: v1.8.0"; "fields: Array of response field names to include. Supported only by selected tools; omitted fields return all fields by default. Valid fields depend on the tool."; "owner (required): Repository owner for `list_issues` and `get_file_contents`."; "repo (required): Repository name for `list_issues` and `get_file_contents`."; "query (required): Search query for `search_code`."; "path: File or directory path for `get_file_contents`; `fields` applies to directory entries only."; "Prerequisite: The tool must be available through a configured GitHub MCP server; the v1.8.0 release says `fields` is supported by selected tools."; "Prerequisite: The README lists required OAuth scope `repo` for `list_issues`, `search_code`, and `get_file_contents`."; "The `fields` parameter is available only on selected tools."

### github-mcp-server adds opt-in Copilot issue assignment tool (2026-07-23)
- slug: github-mcp-server-adds-opt-in-copilot-issue-assignment-tool-d8ebfe3b5859
- score: 0.93

How to use it:

When Copilot is the intended assignee for an issue and the opt-in toolset is enabled, call `assign_copilot_to_issue_with_intent` with the repository, issue number, rationale, confidence, and an explicit `is_suggestion` choice.

Examples:

```
assign_copilot_to_issue_with_intent({"owner":"<owner>","repo":"<repo>","issue_number":<issue_number>,"rationale":"<one concise sentence, 280 characters or less>","confidence":"<LOW|MEDIUM|HIGH>","is_suggestion":<true|false>})
```

- why_it_matters: Assign a GitHub issue to Copilot based on intent when working in a repository.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.7.0>, <https://raw.githubusercontent.com/github/github-mcp-server/v1.7.0/pkg/github/copilot.go>, <https://raw.githubusercontent.com/github/github-mcp-server/v1.7.0/pkg/github/tools.go>
- gotchas: "Version: v1.7.0"; "Availability: Opt-in."; "owner (required): Repository owner."; "repo (required): Repository name."; "issue_number (required): Issue number."; "rationale (required): One concise sentence explaining the concrete signal for choosing Copilot; maximum 280 characters."; "confidence (required): Confidence in the choice: `HIGH` for clear signal or explicit request, `MEDIUM` for reasonable inference with ambiguity, `LOW` for a best guess with limited signal."; "is_suggestion (required): If true, record a pending assignment intent without launching Copilot; approval later supplies launch context. If false, assign Copilot directly."; "base_ref: Git reference for the agent's starting point; defaults to the repository's default branch. Ignored when `is_suggestion` is true."; "custom_instructions: Additional instructions beyond the issue body. Ignored when `is_suggestion` is true."; "Prerequisite: Enable the non-default `copilot_issue_intents` toolset to expose this opt-in tool."; "Prerequisite: The tool requires the `repo` OAuth scope."; "The tool is described as opt-in."

### GitHub Projects fields resolve by name (2026-07-15)
- slug: github-projects-fields-resolve-by-name-8a57e8636de9
- score: 0.92

How to use it:

When reading or updating GitHub Projects item fields by name, use `field_names` for reads and `updated_field: {name, value}` for writes. For writes, resolve the item with `item_owner`, `item_repo`, and `issue_number` or pass `item_id`.

Examples:

```
projects_list({"method":"list_project_items","owner":"<owner>","project_number":<project_number>,"field_names":["Status","Priority"]})
```

```
projects_get({"method":"get_project_item","owner":"<owner>","project_number":<project_number>,"item_id":<item_id>,"field_names":["Status","Priority"]})
```

```
projects_write({"method":"update_project_item","owner":"<owner>","project_number":<project_number>,"item_owner":"<item_owner>","item_repo":"<item_repo>","issue_number":<issue_number>,"updated_field":{"name":"Status","value":"In Progress"}})
```

- why_it_matters: Work with GitHub Projects fields through github-mcp-server when field names are used for resolution.
- before: The PR states that updates previously required field and item IDs and did not resolve option names; reading item field values required listing project fields first.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.6.0>, <https://github.com/github/github-mcp-server/blob/v1.6.0/README.md>, <https://github.com/github/github-mcp-server/pull/2760>
- gotchas: "Version: v1.6.0"; "projects_list.method (required): Use `list_project_items` to list items."; "projects_list.owner (required): Project owner login."; "projects_list.project_number (required): Project number for `list_project_items`."; "projects_list.field_names: Field names to include; mutually exclusive with `fields`."; "projects_get.method (required): Use `get_project_item` to get an item."; "projects_get.item_id (required): Project item ID for `get_project_item`."; "projects_get.field_names: Field names to include; mutually exclusive with `fields`. Without either, only title is included."; "projects_write.method (required): Use `update_project_item` to update an item."; "projects_write.owner (required): Project owner login."; "projects_write.project_number (required): Project number; required for methods other than `create_project`."; "projects_write.updated_field (required): Field and new value; accepts `{name, value}` or `{id, value}`. For single-select fields, name form resolves option names; set value to null to clear."; "updated_field.name: Field name; use instead of `id`. The `name` and `id` forms are mutually exclusive."; "updated_field.value (required): New field value; null clears the field."; "projects_write.item_id: Project item ID; provide this or the `item_owner` + `item_repo` + `issue_number` reference to resolve an item for update."; "projects_write.item_owner: Issue or pull request repository owner when resolving the item by issue number."; "projects_write.item_repo: Issue or pull request repository name when resolving the item by issue number."; "projects_write.issue_number: Issue number used with `item_owner` and `item_repo` to resolve the item."; "Prerequisite: Project reads require `read:project` scope (the docs also accept `project`); updates require `project` scope."

### github-mcp-server STDIO OAuth login (2026-06-27)
- slug: github-mcp-server-stdio-oauth-login-830811944300
- score: 0.97

How to use it:

If connecting the local GitHub MCP server over STDIO on github.com without a PAT, run `github-mcp-server stdio` from an official released build; first use starts browser OAuth and keeps the token in memory. For Docker, publish the callback port on loopback and set `GITHUB_OAUTH_CALLBACK_PORT=8085`.

Examples:

```
github-mcp-server stdio
```

```
docker run -i --rm -p 127.0.0.1:8085:8085 -e GITHUB_OAUTH_CALLBACK_PORT=8085 ghcr.io/github/github-mcp-server
```

- why_it_matters: Connect a local STDIO GitHub MCP server when you do not have a personal access token.
- before: The v1.4.0 local-server documentation required creating a GitHub Personal Access Token for authentication.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.5.0>, <https://github.com/github/github-mcp-server/blob/v1.5.0/docs/oauth-login.md>, <https://github.com/github/github-mcp-server/blob/v1.5.0/README.md>, <https://github.com/github/github-mcp-server/blob/v1.4.0/README.md>
- gotchas: "Version: v1.5.0"; "stdio (required): Select the local STDIO server command."; "--oauth-client-id <YOUR_CLIENT_ID>: Enables OAuth with your own app; official released builds default to their baked-in app on github.com."; "GITHUB_OAUTH_CALLBACK_PORT=8085: Sets the fixed local OAuth callback port; needed for Docker's published callback port."; "Prerequisite: Use an official released binary or Docker image for the baked-in OAuth app on github.com; first use launches browser authorization."; "Prerequisite: Docker use requires Docker installed and running; publish callback port 8085 to 127.0.0.1 for OAuth."

### github-mcp-server HTTP supports a custom listen address (2026-06-18)
- slug: github-mcp-server-http-supports-a-custom-listen-address-3fba49571b95
- score: 0.94

How to use it:

When the HTTP server needs a specific bind host, run its `http` command with `--listen-host` and `--port` set to the desired host and port. An empty listen host binds to all interfaces.

Examples:

```
github-mcp-server http --listen-host 127.0.0.1 --port 8082
```

- why_it_matters: Configure the GitHub MCP server's HTTP listener for a repository development environment that requires a particular listen address.
- before: The HTTP server bound to all interfaces on the configured port; the custom host setting was not available.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.4.0>, <https://github.com/github/github-mcp-server/pull/2655>, <https://github.com/github/github-mcp-server/blob/v1.4.0/docs/streamable-http.md>
- gotchas: "Version: v1.4.0"; "--listen-host: Host for the HTTP server to bind to; empty by default, which binds to all interfaces. Environment variable: `GITHUB_LISTEN_HOST`."; "--port: HTTP server port; defaults to 8082 and remains independently honored when `--listen-host` is set."; "Prerequisite: Use a GitHub MCP Server build that includes the v1.4.0 change."

### github-mcp-server UI-enabled write tools add show_ui (2026-06-18)
- slug: github-mcp-server-ui-enabled-write-tools-add-show-ui-a92987f2cf58
- score: 0.95

How to use it:

When calling the UI-backed `issue_write` or `create_pull_request` tool with an MCP Apps-capable client, set `show_ui` to `true` to allow the form or `false` to bypass it and execute directly. The parameter is optional and defaults to `true` when available.

Examples:

```
issue_write({"method":"create","owner":"<owner>","repo":"<repo>","title":"<title>","show_ui":false})
```

```
create_pull_request({"owner":"<owner>","repo":"<repo>","title":"<title>","head":"<branch>","base":"<base-branch>","show_ui":true})
```

- why_it_matters: When using a UI-enabled write tool, choose whether to show its UI.
- before: Before `show_ui`, the server routed these tools to the form based on implicit signals: form submission state and whether the call included parameters the form could not represent. There was no explicit parameter to request direct execution.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.4.0>, <https://github.com/github/github-mcp-server/pull/2601>, <https://github.com/github/github-mcp-server/blob/main/docs/insiders-features.md>
- gotchas: "Version: v1.4.0"; "show_ui: Boolean routing flag on `issue_write` and `create_pull_request`: `true` allows the MCP App form; `false` bypasses it for direct execution. Defaults to `true`. Only exposed to clients that advertise MCP App UI support."; "Prerequisite: `show_ui` is available to clients that advertise MCP App UI support; the supported MCP Apps tools are `issue_write` and `create_pull_request`."; "Prerequisite: `issue_write` and `create_pull_request` require the GitHub OAuth `repo` scope."

### github-mcp-server get_commit adds include_patch parameter (2026-06-08)
- slug: github-mcp-server-get-commit-adds-include-patch-parameter-7ed4f0d355e0
- score: 0.95

How to use it:

When reviewing a repository change and you need the patch, call `get_commit` with the repository owner, name, commit SHA, and `detail: "full_patch"`.

Examples:

```
get_commit(owner: "<owner>", repo: "<repo>", sha: "<commit-sha>", detail: "full_patch")
```

- why_it_matters: Retrieve commit details while reviewing a repository change where the patch is needed.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.2.0>, <https://github.com/github/github-mcp-server/blob/v1.2.0/README.md>
- gotchas: "Version: v1.2.0"; "owner (required): Repository owner."; "repo (required): Repository name."; "sha (required): Commit SHA, branch name, or tag name."; "detail: Use `full_patch` to include unified diff content for each changed file; it can be very large. Default is `stats`."; "Prerequisite: The tool requires the `repo` OAuth scope."; "Docs conflict: The v1.2.0 README documents optional `detail` (`none`, `stats`, `full_patch`) and does not document `include_patch`; this differs from the release note's named parameter. Use the documented `detail: \"full_patch\"` form for v1.2.0."

### github-mcp-server projects_write adds project and iteration field methods (2026-06-08)
- slug: github-mcp-server-projects-write-adds-project-and-iteration-field-methods-b72d48e287d6
- score: 0.97

How to use it:

When configuring project work for a repository, create a GitHub ProjectsV2 project with `projects_write` using `create_project`, then add its iteration field with `create_iteration_field`. The documented creation methods take an account owner; `create_iteration_field` targets the created project by its project number.

Examples:

```
projects_write({"method":"create_project","owner":"<owner>","owner_type":"user|org","title":"<project title>"})
```

```
projects_write({"method":"create_iteration_field","owner":"<owner>","project_number":<project number>,"field_name":"<field name>","iteration_duration":<days>,"start_date":"<YYYY-MM-DD>"})
```

- why_it_matters: Create a GitHub project and an iteration field while configuring project work for a repository.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.2.0>, <https://github.com/github/github-mcp-server/blob/v1.2.0/README.md>
- gotchas: "Version: v1.2.0"; "method (required): Select `create_project` or `create_iteration_field`."; "owner (required): User or organization login that owns the project."; "owner_type (required): For `create_project`, specify `user` or `org`."; "title (required): Title of the project to create."; "project_number (required): Existing project number for `create_iteration_field`; omit for `create_project`."; "field_name (required): Name for the iteration field."; "iteration_duration (required): Iteration duration in days."; "start_date (required): Iteration start date in `YYYY-MM-DD` format."; "iterations: Custom iteration definitions; use when durations vary, breaks are needed, or specific titles are required. Otherwise GitHub creates three iterations using the duration and start date."; "Prerequisite: The `projects_write` tool requires the GitHub OAuth `project` scope."; "Prerequisite: The Projects toolset must be available in the MCP server."

### github-mcp-server issue fields support (2026-05-28)
- slug: github-mcp-server-issue-fields-support-372c253ae98b
- score: 0.92

How to use it:

When `remote_mcp_issue_fields` is enabled, list fields with `list_issue_fields`, filter issues with `list_issues.field_filters`, and read or write field values with `issues.read` and `issues.write`. To suggest a type change, use the documented suggestion flag if available; the current tool reference calls it `is_suggestion`.

Examples:

```
list_issue_fields({"owner":"<owner>","repo":"<repo>"})
```

```
list_issues({"owner":"<owner>","repo":"<repo>","field_filters":[{"field_name":"<field name>","value":"<value>"}]})
```

```
issue_write({"owner":"<owner>","repo":"<repo>","issue_number":<number>,"issue_fields":[{"field_name":"<field name>","value":"<value>"}]})
```

- why_it_matters: Inspect and update issues using custom issue fields, or filter an issue search by their values.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.1.0>, <https://github.com/github/github-mcp-server?locale=en-US>, <https://github.com/github/github-mcp-server/blob/main/docs/feature-flags.md>
- gotchas: "Version: v1.1.0"; "Availability: Issue field support is behind the `remote_mcp_issue_fields` feature flag and enabled automatically in Insiders Mode."; "list_issue_fields.owner (required): Repository or organization owner."; "list_issue_fields.repo: Repository; when omitted, returns organization-level fields."; "list_issues.owner (required): Repository owner."; "list_issues.repo (required): Repository name."; "list_issues.field_filters: Array of field_name/value filters; the server coerces values to the field type."; "issue_fields: Array of field updates; each item needs field_name and exactly one of value, field_option_name, or delete:true."; "issue_fields.field_name (required): Name of the issue field to set or clear."; "issue_fields.value: Value for the field; mutually exclusive with field_option_name and delete:true."; "issue_fields.field_option_name: Single-select option name; mutually exclusive with value and delete:true."; "issue_fields.delete: Set true to clear the field; mutually exclusive with value and field_option_name."; "issue_write.is_suggestion: Current reference flag for recording an issue type change as a suggestion rather than applying it."; "Prerequisite: Issue field features are gated by `remote_mcp_issue_fields`; the release note says they are enabled automatically in Insiders Mode."; "Prerequisite: `list_issue_fields` requires OAuth scope `repo` or `read:org`; `list_issues` and issue writing require `repo`."; "Docs conflict: The release note names a `suggest` bool flag for type changes; current official feature documentation names the flag `is_suggestion`. Confirm the server version's tool schema before using it."

### github-mcp-server paginate GHAS alert listings (2026-05-28)
- slug: github-mcp-server-paginate-ghas-alert-listings-3b4598b7462b
- score: 0.97

How to use it:

When reviewing a repository’s GHAS alerts, call the relevant listing tool with `owner`, `repo`, `page: 2`, and `perPage: 100`; continue with later page numbers to retrieve beyond the first page.

Examples:

```
{"tool":"list_code_scanning_alerts","arguments":{"owner":"<owner>","repo":"<repo>","page":2,"perPage":100}}
```

```
{"tool":"list_dependabot_alerts","arguments":{"owner":"<owner>","repo":"<repo>","page":2,"perPage":100}}
```

```
{"tool":"list_secret_scanning_alerts","arguments":{"owner":"<owner>","repo":"<repo>","page":2,"perPage":100}}
```

- why_it_matters: Review all code scanning, Dependabot, or secret scanning alerts for a repository with a large backlog.
- before: The tools previously returned only the first page; v1.1.0 added pagination to retrieve beyond it.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.1.0>, <https://github.com/github/github-mcp-server/blob/v1.1.0/README.md>
- gotchas: "Version: v1.1.0"; "owner (required): Repository owner."; "repo (required): Repository name."; "page: Page number for pagination; minimum 1."; "perPage: Results per page; minimum 1, maximum 100."; "Prerequisite: The listing tools require the `security_events` OAuth scope; `repo` is also accepted."

### github-mcp-server search_commits (2026-05-28)
- slug: github-mcp-server-search-commits-597a0158ff0f
- score: 0.97

How to use it:

When debugging, auditing, or investigating a release, search commits with `search_commits` using GitHub commit search syntax. Include a scope qualifier such as `repo:<owner>/<repo>` in the required `query`.

Examples:

```
search_commits({"query":"repo:<owner>/<repo> fix panic","page":1,"perPage":30})
```

- why_it_matters: Find commits relevant to debugging, auditing, or investigating a release.
- before: List repository commits and use that listing to find specific commits.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.1.0>, <https://github.com/github/github-mcp-server/blob/v1.1.0/README.md>
- gotchas: "Version: v1.1.0"; "query (required): Commit search REST query. Use `repo:owner/repo`, `org:`, or `user:` to scope; supports author, committer, date, merge, hash, tree, parent, and `is:public` qualifiers. Searches commit messages on the default branch only."; "page: Page number, minimum 1."; "perPage: Results per page, from 1 to 100."; "order: Sort order."; "sort: Sort by author or committer date; defaults to best match."; "Prerequisite: The tool requires OAuth scope `repo`."; "Search uses GitHub search syntax."

### github-mcp-server set_issue_fields updates granular issue field values (2026-04-16)
- slug: github-mcp-server-set-issue-fields-updates-granular-issue-field-values-ad5da4b719e8
- score: 0.91

How to use it:

When setting, updating, or deleting an organization-level custom field value on an issue, enable `issues_granular` and call `set_issue_fields` with the repository, issue number, and field value. The v1.0.0 release documents the flag; its tool schema is in the tagged source snapshot.

Examples:

```
set_issue_fields({"owner":"<owner>","repo":"<repo>","issue_number":<issue-number>,"fields":[{"field_id":"<field-node-id>","text_value":"<value>"}]})
```

```
set_issue_fields({"owner":"<owner>","repo":"<repo>","issue_number":<issue-number>,"fields":[{"field_id":"<field-node-id>","delete":true}]})
```

- why_it_matters: Set or update an organization-level custom field value on an issue.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v1.0.0>, <https://github.com/github/github-mcp-server/blob/v1.0.0/pkg/github/__toolsnaps__/set_issue_fields.snap>
- gotchas: "Version: 1.0.0"; "Availability: Feature flagged under `issues_granular`."; "issues_granular (required): Feature flag for the granular Issues toolset containing `set_issue_fields`."; "owner (required): Repository owner username or organization."; "repo (required): Repository name."; "issue_number (required): Issue number to update; minimum 1."; "fields (required): Nonempty array of field values. Each item requires `field_id` and takes the value key matching the field type, or `delete: true` to remove the value."; "field_id (required): GraphQL node ID of the issue field."; "text_value: Value for a text field."; "number_value: Value for a number field."; "date_value: ISO 8601 date string for a date field."; "single_select_option_id: GraphQL node ID of the option for a single-select field."; "delete: Set true to remove the field value."; "Prerequisite: Enable the `issues_granular` feature flag."; "Applies to organization-level custom field values on issues."

### github-mcp-server adds check runs (2026-03-06)
- slug: github-mcp-server-adds-check-runs-fdaeac7a5d6d
- score: 0.95

How to use it:

When inspecting CI checks for a pull request, call `pull_request_read` with `method: "get_check_runs"` and the repository owner, name, and PR number. It returns check runs for the PR head commit; use optional pagination to retrieve more results.

Examples:

```
pull_request_read({"method":"get_check_runs","owner":"<owner>","repo":"<repo>","pullNumber":<pull-number>})
```

- why_it_matters: Inspect check runs while working on a repository through github-mcp-server.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v0.32.0>, <https://github.com/github/github-mcp-server/blob/v0.32.0/pkg/github/pullrequests.go>
- gotchas: "Version: v0.32.0"; "method (required): Set to `get_check_runs`."; "owner (required): Repository owner."; "repo (required): Repository name."; "pullNumber (required): Pull request number."; "page: Page number for pagination; minimum 1."; "perPage: Results per page; minimum 1, maximum 100."; "Prerequisite: The `pull_request_read` tool requires the `Repo` scope."

### github-mcp-server adds ProjectV2 status update tools (2026-02-19)
- slug: github-mcp-server-adds-projectv2-status-update-tools-f27d231e23c0
- score: 0.97

How to use it:

When an agent needs to list, inspect, or create a GitHub ProjectV2 status update, use the `projects_list`, `projects_get`, or `projects_write` tool with the corresponding status-update method.

Examples:

```
projects_list({"method":"list_project_status_updates","owner":"<owner>","owner_type":"<user|org>","project_number":<project_number>,"per_page":50})
```

```
projects_get({"method":"get_project_status_update","status_update_id":"<status_update_node_id>"})
```

```
projects_write({"method":"create_project_status_update","owner":"<owner>","owner_type":"<user|org>","project_number":<project_number>,"status":"<status>","body":"<markdown>","start_date":"<YYYY-MM-DD>","target_date":"<YYYY-MM-DD>"})
```

- why_it_matters: List, inspect, or create a status update for a GitHub ProjectV2 project.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v0.31.0>, <https://github.com/github/github-mcp-server/blob/v0.31.0/README.md>
- gotchas: "Version: v0.31.0"; "projects_list.method (required): Set to `list_project_status_updates`."; "projects_list.owner (required): Project owner’s user or organization login."; "projects_list.project_number (required): Project number for listing status updates."; "projects_list.owner_type: Owner type: `user` or `org`; otherwise auto-detected."; "projects_list.per_page: Results per page, maximum 50."; "projects_list.after: Forward pagination cursor from the previous page’s `pageInfo.nextCursor`."; "projects_get.method (required): Set to `get_project_status_update`."; "projects_get.status_update_id (required): Status update node ID."; "projects_write.method (required): Set to `create_project_status_update`."; "projects_write.owner (required): Project owner’s user or organization login."; "projects_write.project_number (required): Project number for the status update."; "projects_write.status: Status of the project update."; "projects_write.body: Markdown body of the status update."; "projects_write.start_date: Start date in `YYYY-MM-DD` format."; "projects_write.target_date: Target date in `YYYY-MM-DD` format."; "projects_write.owner_type: Owner type: `user` or `org`; otherwise auto-detected."; "Prerequisite: The `projects_list` and `projects_get` tools require OAuth scope `read:project` (accepted scopes also include `project`)."; "Prerequisite: The `projects_write` tool requires OAuth scope `project`."

### github-mcp-server adds Streamable HTTP mode (2026-02-19)
- slug: github-mcp-server-adds-streamable-http-mode-db39dfec1578
- score: 0.95

How to use it:

When a client needs Streamable HTTP, run `github-mcp-server http` to serve the GitHub MCP Server at `http://localhost:8082`. Configure the client to use that HTTP URL.

Examples:

```
github-mcp-server http
```

```
{"type":"http","url":"http://localhost:8082"}
```

- why_it_matters: Run the GitHub MCP Server over Streamable HTTP for a client that uses that transport.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v0.31.0>, <https://github.com/github/github-mcp-server/blob/v0.31.0/docs/streamable-http.md>
- gotchas: "Version: v0.31.0"

### github-mcp-server can exclude tools through server configuration (2026-02-19)
- slug: github-mcp-server-can-exclude-tools-through-server-configuration-5943ebd4438b
- score: 0.91

How to use it:

When configuring a GitHub MCP Server deployment, list the tools to disable as comma-separated names. Set them with `--exclude-tools` for a local server or `X-MCP-Exclude-Tools` for a remote server; excluded tools stay disabled even if otherwise enabled.

Examples:

```
{"type":"stdio","command":"go","args":["run","./cmd/github-mcp-server","stdio","--toolsets=<toolsets>","--exclude-tools=<tool1>,<tool2>"],"env":{"GITHUB_PERSONAL_ACCESS_TOKEN":"<github-token>"}}
```

```
{"type":"http","url":"https://api.githubcopilot.com/mcp/","headers":{"X-MCP-Toolsets":"<toolsets>","X-MCP-Exclude-Tools":"<tool1>,<tool2>"}}
```

- why_it_matters: Disable selected tools in a GitHub MCP Server deployment configuration.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v0.31.0>, <https://github.com/github/github-mcp-server/blob/v0.31.0/docs/server-configuration.md>
- gotchas: "Version: v0.31.0"; "--exclude-tools=<tool1>,<tool2> (required): Comma-separated tool names to disable, regardless of other settings."; "X-MCP-Exclude-Tools: <tool1>,<tool2> (required): Remote-server header listing comma-separated tool names to disable."; "Prerequisite: Use the local stdio or remote HTTP server configuration format; the docs’ local example supplies a GitHub personal access token through `GITHUB_PERSONAL_ACCESS_TOKEN`."

### github-mcp-server assign_copilot_to_issue accepts custom_instructions (2026-01-19)
- slug: github-mcp-server-assign-copilot-to-issue-accepts-custom-instructions-13235c7c7c15
- score: 0.95

How to use it:

When assigning Copilot to an issue with task-specific guidance, call `assign_copilot_to_issue` with the issue identifiers and `custom_instructions` containing that guidance.

Examples:

```
{"name":"assign_copilot_to_issue","arguments":{"owner":"<owner>","repo":"<repo>","issue_number":123,"custom_instructions":"Follow PEP 8. Use pytest. Maintain Python 3.8+ compatibility."}}
```

- why_it_matters: Assign Copilot coding agent to an issue with task-specific guidance.
- sources: <https://github.com/github/github-mcp-server/releases/tag/v0.29.0>, <https://github.com/github/github-mcp-server/pull/1806>, <https://github.com/github/github-mcp-server/blob/v0.29.0/README.md>
- gotchas: "Version: v0.29.0"; "owner (required): Repository owner."; "repo (required): Repository name."; "issue_number (required): Issue number."; "custom_instructions: Additional context, constraints, or guidance for the agent beyond the issue body."; "Prerequisite: The tool requires OAuth scope `repo`."
