# \[Bug\]: Deferred MCP App forms never display; write tool returns awaiting_user_submission with no fallback · Issue \#23825 · pingdotgg/t3code

[View on GitCafe](https://git.cafe/pingdotgg/t3code/issues/23825)

Repository: [pingdotgg/t3code](https://git.cafe/pingdotgg/t3code)

Visibility: public

State: backlog

Priority: 0

## Description

[Discussion and activity](https://git.cafe/pingdotgg/t3code/issues/23825)

---

### 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
{"reason":"An interactive form is being shown to the user. The operation has not been performed.","status":"awaiting_user_submission"}
```

5. 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.
6. 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)

