MCP Apps with extra functionality#1974
Conversation
…ce CreateIssueApp to manage existing issue data
…server into mcp-ui-apps-3
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
- issue-write: derive owner/name from full_name since search_repositories minimal output omits the owner object (mirrors pr-write) - pr-write/issue-write: clear available branch/label/assignee/milestone/type lists and filters in the toolInput reset effect so prefill effects can't match against the previous repo's stale data Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
@copilot resolve the merge conflicts in this pull request |
# Conflicts: # ui/src/apps/issue-write/App.tsx # ui/src/apps/pr-write/App.tsx
Resolved the merge conflicts with |
|
@copilot resolve the merge conflicts in this pull request |
# Conflicts: # ui/src/apps/issue-write/App.tsx # ui/src/apps/pr-write/App.tsx
Resolved the merge conflicts with |
…creation and updates
Avoids leaking HTTP connections when paging through assignees, milestones, branches, collaborators, and teams. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The build-ui cache only saved get-me/issue-write/pr-write HTML, so once a cache entry was stored it restored an incomplete ui_dist on later runs and skipped the rebuild, leaving pr-edit.html absent and panicking the tests. Add pr-edit.html to the cached paths and bump the cache key to v2 to evict the incomplete entries. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…dvanced # Conflicts: # docs/feature-flags.md # docs/insiders-features.md # pkg/github/__toolsnaps__/create_pull_request.snap # pkg/github/issues.go # pkg/github/pullrequests.go # pkg/github/pullrequests_test.go
tommaso-moro
left a comment
There was a problem hiding this comment.
LGTM, one thing I noticed is that create_pull_request and issue_write both expose a show_ui param, but update_pull_request doesn't. Is this intentional?

Summary
This pull request adds interactive MCP App forms for creating and editing GitHub issues and pull requests, and a new backend tool for fetching the UI data those forms need. It introduces a new
pr-editMCP App for editing pull requests, adds reviewer-request support to bothcreate_pull_requestandupdate_pull_request, and standardises how the agent is told to wait while a form is shown to the user.Why
Expands on #1957
Closes https://github.com/github/copilot-mcp-core/issues/1754
What changed
Backend: UI Data Fetch Tool
ui_gettool to provide UI data for MCP Apps. It supports thelabels,assignees,milestones,issue_types,branches,issue_fieldsandreviewersmethods, including its schema and logic for fetching data using GitHub APIs.ui_gettool into the server toolset, making it available as an insiders-only feature.ui_getas app-only (_meta.ui.visibility: ["app"]) per the MCP Apps 2026-01-26 spec, so the host keeps it out of the agent's tool list while the bundled MCP App views can still call it viatools/call.Backend: Pull Request create/edit tools
reviewersparameter (GitHub usernames orORG/team-slugteam reviewers) to bothcreate_pull_requestandupdate_pull_request, requesting reviews after the PR is created/updated.update_pull_requestvia the newpr-editresource (ui://github-mcp-server/pr-edit,_meta.ui.visibility: ["model", "app"]), with form-parameter handling so calls carrying only form-representable fields hand off to the UI and others execute directly.Backend: interactive form handling
utils.NewToolResultAwaitingFormSubmissionhelper used byissue_write,create_pull_requestandupdate_pull_requestwhen a form is shown. The result is markedIsError=truewithstatus: "awaiting_user_submission"structured content and an explicit "STOP, the operation has not been performed" message, so agents don't claim success or chain dependent tool calls while the user is still interacting with the form. The host still renders the UI because rendering is keyed off the tool's_meta.ui.issue_writeform parameter set (issue_fields,state,state_reason,duplicate_of) so more edits stay within the form instead of bypassing it.Frontend: MCP App UIs
pr-editapp for editing pull requests, registered in the UI build.pr-writeapp to support repository search/selection and dynamically loads branches for the chosen repository usingui_get, with logic to prevent invalid base/head selections (e.g. the same branch for base and head).issue-writeapp accordingly.MCP impact
create_pull_requestandupdate_pull_requestgain areviewersparameter, andupdate_pull_requestgains an MCP App UI. A newui_gettool is added.Prompts tested (tool changes only)
Security / limits
ui_getis declared app-only (_meta.ui.visibility: ["app"]), so the host does not expose it in the agent's tool list; it is callable only by the bundled MCP App views viatools/call. It is read-only and gated behind the insiders MCP Apps feature flag. The PR create/edit form handoffs andreviewerssupport are also gated behind the insiders MCP Apps feature flag.Tool renaming
deprecated_tool_aliases.goNote: if you're renaming tools, you must add the tool aliases. For more information on how to do so, please refer to the official docs.
Lint & tests
./script/lint./script/testDocs