[Bug]: Deferred MCP App forms never display; write tool returns awaiting_user_submission with no fallback#23825

opened1d agobyKkaovilai

Problem

A write tool that defers to an MCP App form returns awaiting_user_submission, but the thread never shows the form or the deferred status. The call has no effect and there is no way to reach the pending operation from the UI.

This is the part of #16992 that #17027 did not cover. The maintainer closed #16992 with "One part of this is fixed on main in #17027 ... One part is still open: Show an error and retain access to tool results when another MCP app runtime failure occurs. If that part still matters to you, please open a new issue for that part only." This is that issue.

Reproduction

  1. In T3 Code, connect the GitHub MCP server locally (github-mcp-server stdio) with a token that can write.
  2. Ask the agent to create a pull request (mcp__github__create_pull_request) in a repo where the branch exists.
  3. T3 shows its normal runtime approval prompt for the tool call. Approve it.
  4. The tool returns:
json
1{"reason":"An interactive form is being shown to the user. The operation has not been performed.","status":"awaiting_user_submission"}
  1. No form, card, or inline embed appears in the thread, before or after the runtime approval, including when the work trace is expanded. Asking the model to retry returns the same result.
  2. No pull request exists on GitHub.

The GitHub MCP server intentionally defers write tools to a form when the client advertises io.modelcontextprotocol/ui; its tool metadata points at ui://github-mcp-server/pr-create. So the server side is behaving as designed and the client is expected to present the form.

Earlier evidence

The same class was reported in #16992 (comment 6228795950) with update_pull_request: approving the runtime prompt did not submit or display the form, the tool returned awaiting_user_submission, and only a user-run gh pr edit completed the operation.

mcp__github__issue_write fails the same way, so even filing this report required a user-run command.

Expected behavior

When a tool result defers to an MCP App form, the thread should either show the form, or show an understandable deferred state with an escape hatch that keeps the tool result accessible. Today the result is invisible and the operation silently does not happen.

Workaround

The GitHub MCP server documents a feature flag that stops form deferral, so write tools execute directly:

  • local stdio: --features mcp_apps_disable_form_deferral
  • remote: X-MCP-Features: mcp_apps_disable_form_deferral

(see github-mcp-server docs/server-configuration.md). This works around the client gap; it does not fix it.

Environment

  • T3 Code, macOS, build as of 2026-10-22
  • GitHub MCP server, local stdio transport, --features flag available in the installed binary
  • Not verified on mobile or with other MCP servers that use form deferral

Note

Responses generated with Codex (model: DeepSeek-V4.1-Flash-1017)

Synced from GitHub

Confirmed another reproduction on 23 October 2026 (Australia/Sydney, AEDT UTC+11).

Environment: T3 Code with the Codex harness, gpt-6.1-sol at high reasoning. macOS 26.7.1. The installed T3 Code Nightly app reports 0.1.2-nightly.20261022.3512; I have not bound that installed version to the active server build.

The branch was already pushed. The agent called mcp__github__create_pull_request with the repository, base, head, title, description and draft: false. The returned MCP result had isError: true and this text:

text
1An interactive form has been shown to the user for creating a new pull request in seankoji-com/frugalbar. STOP — do not call any other tools, do not respond as if the pull request was created, and do not claim the operation succeeded. The pull request has NOT been created yet; only the form was rendered. Wait silently for the user to review and click Submit. When they do, the real result will be delivered to your context automatically.

No form was visible to the user in T3. The agent stopped, then told the user to submit the form. The user replied: "what form? i never see any form in T3 code displayed to me" and said this has happened from time to time.

After that, gh pr list for the exact head branch returned [], confirming no PR had been created. A subsequent authenticated gh pr create succeeded and returned FrugalBar PR #125.

This creates two failures: the write never happens, and the tool result tells the agent that the user has a visible form and must act on it. The user has no way to complete that supposed action. Please show the deferred form, or return an accurate unsupported/deferred state with a usable fallback. The agent also needs to distinguish "form requested" from "form actually displayed".

I did not change MCP configuration or disable form deferral. This report confirms the end-to-end failure; it does not establish which rendering or capability-negotiation path caused it.