openai / openai/codex

Android Remote: MCP form elicitation shows only Deny and Cancel, no Accept

Open
#44,899 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug mcp remote
Dominant language
Rust
Stars
125k
Forks
19.4k
PR merge metrics
PR metrics pending

Description

Android Remote displays the message from a standard MCP form elicitation, but only offers Deny and Cancel. There is no affirmative control, so an explicit human response cannot be submitted.

Environment:

  • ChatGPT Android 1.2026.244 (operator-confirmed; Android OS version not provided).
  • Connected macOS host: ChatGPT desktop 26.903.61454, build 8378.
  • Bundled codex-cli 0.153.4.
  • MCP SDK 1.27.2.

The live server used authenticated streamable HTTP. Changing a required boolean to a single-choice enum, then to an empty object, did not resolve the visible symptom. The deployed empty-object request expired without receiving a decision. Server transport tests and deployment health passed; this does not prove mobile UI correctness.

Minimal independent stdio server (no external requests, credentials, or workflow actions):

"""Standalone MCP UI reproduction. No network, workflow, or write operations."""
from mcp.server.fastmcp import Context, FastMCP

server = FastMCP('Mobile form reproduction')


@server.tool(annotations={'readOnlyHint': True, 'idempotentHint': True})
async def probe_form(ctx: Context) -> dict:
    """Show a harmless form and report the action. This never approves real work."""
    result = await ctx.session.elicit_form(
        message='Respond to this read-only UI test. No workflow or other action will execute.',
        requestedSchema={'type': 'object', 'properties': {}, 'required': []},
        related_request_id=ctx.request_id,
    )
    return {'observed_action': result.action, 'workflow_executed': False}


if __name__ == '__main__':
    server.run(transport='stdio')

Run with Python and mcp==1.27.2, register it as a disposable stdio MCP server, then call probe_form from Android Remote. It only reports the elicitation action; accepting this reproduction does not approve or execute real work.

Expected: the user can explicitly accept the empty form (action=accept, content={}), decline, or cancel.

Observed in the live Android case: message, Deny, and Cancel only; no affirmative control. No user decision was recorded. The independent server's accept/decline/cancel stdio tests pass, but it has not yet been connected to the affected phone.

Please confirm whether standard MCP form elicitation is supported in this Android Remote version and whether this is a mobile renderer, relay, or capability-negotiation problem. I did not add privileged codex_approval_kind metadata or enable automatic approvals as a workaround.

This report contains no tokens, internal workflow prompts, database contents, or private repository links.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Run the standalone stdio reproduction with Python and mcp==1.27.2, register it as a disposable server, and call probe_form from Android Remote. Trace the elicitation path across capability negotiation, relay, and mobile rendering; done means Android exposes accept, decline, and cancel and records the selected action correctly.

Written by the indexing model from the issue text.

Assessment

Tech stack
android, python, rust
Domain
backend-api-design, mobile-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
52/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.