Repository navigation
Document GitHub's MCP Apps form deferral on the Aperture server - #2138
Merged
Merged
Conversation
GitHub's create_pull_request, update_pull_request and issue_write are backed by interactive HTML forms. When the MCP client advertises the io.modelcontextprotocol/ui capability, github-mcp-server defers the call to that form and makes no API call, returning a stub that tells the model the PR was not created. kagent renders no UI, so a deferred call can never be submitted. Nothing here holds it shut and it is not currently biting us, but the failure is shaped like a permissions problem and is not one: create_branch and create_or_update_file have no form, so a deferred run leaves a pushed branch with commits and no PR. Record the symptom and the kill switch - ?features=mcp_apps_disable_form_deferral on Aperture's GitHub connector - next to the server it applies to.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
kagent reported that
GitHub_create_pull_requestreturned an interactive-UIacknowledgement instead of a PR, with no API call reaching GitHub, while every
other GitHub write through the same connector worked and returned real data.
That is real upstream behaviour, not a permissions fault. GitHub's
create_pull_request,update_pull_requestandissue_writeare backed byinteractive HTML forms ("MCP Apps").
shouldDeferToForm()inpkg/github/ui_capability.gohands the call off to that form — returning an "an interactive form has been
shown to the user ... the pull request has NOT been created" stub and making
no API call — whenever the client advertises the
io.modelcontextprotocol/uicapability extension. Headless clients are meant to strip
_meta.uiandexecute directly (PR #2774).
kagent renders no UI, so a deferred call can never be submitted. The stub also
instructs the model not to claim success or call another tool, so it surfaces
as a well-behaved agent hitting a wall rather than as an error.
The trap is the shape of the failure:
create_branchandcreate_or_update_filehave no form and execute unconditionally, so a deferredrun leaves a pushed branch with commits on it and no PR, under an OAuth
connector whose scopes are entirely fine. That reads as a scope problem and
sends you auditing the wrong thing.
Solution
Comment only — no manifest change.
kubectl kustomizeoutput is byte-identicaland the parsed object is unchanged.
Records, next to the server it applies to: what the stub means, why it is not
an auth problem, the branch-with-no-PR symptom, and the lever if it returns —
?features=mcp_apps_disable_form_deferralon Aperture's GitHub connector url,GitHub's documented kill switch for exactly this. Also notes that the connector
lives in the Aperture admin dashboard outside ArgoCD, and that editing its url
changes the OAuth resource identifier and so forces a reconnect.
Not currently blocking anything, and nothing in this repo holds it shut —
hence a hazard note rather than a fix.