You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I may be missing part of the intended browser-to-agent integration here.
When a declarative form does not have toolautosubmit, Chrome populates its fields and leaves the invocation active until the form is later submitted or canceled. That makes sense for a browser-native, human-in-the-loop flow.
Through a conventional MCP client, however, the tool call remains pending with no indication that field population succeeded or that submission is now awaited. From the caller’s perspective, this is indistinguishable from a tool that is stuck or whose promise never resolves.
Reproduction
I reproduced this against Stripe’s public test checkout using only published tooling:
received no WebMCP.toolResponded event during the observation window
The form had no toolautosubmit attribute.
Question
Is the intended browser-to-agent contract that external callers keep the tool call open until someone eventually submits or cancels the form?
If so, how should a caller distinguish this expected state from an arbitrary unresolved tool execution?
A terminal Completed result at the field-population boundary does not seem accurate because the form’s action has not completed. Some possible nonterminal approaches might be:
surface an explicit lifecycle signal such as awaiting_submission
require browser-to-agent adapters to translate declarative activation into an elicitation or progress event while preserving the pending final result
I do not have a strong preference among these. The main issue is that the successful transition from “invoked” to “form populated and awaiting submission” is currently invisible to a conventional MCP caller.
Related discussions
Elicitation #21 identifies the need for agents to display a waiting state and adjust their timeouts during in-page elicitation.
I may be missing part of the intended browser-to-agent integration here.
When a declarative form does not have
toolautosubmit, Chrome populates its fields and leaves the invocation active until the form is later submitted or canceled. That makes sense for a browser-native, human-in-the-loop flow.Through a conventional MCP client, however, the tool call remains pending with no indication that field population succeeded or that submission is now awaited. From the caller’s perspective, this is indistinguishable from a tool that is stuck or whose promise never resolves.
Reproduction
I reproduced this against Stripe’s public test checkout using only published tooling:
151.0.7922.169chrome-devtools-mcp@1.8.0@modelcontextprotocol/inspector@2.5.0Chromium was launched with:
Chrome DevTools MCP was attached with:
I then used Inspector CLI to:
select_payment_methodwithcard.fill_payment_formtool.tools/callexternally at 15 seconds.The fill invocation was equivalent to:
gnutimeout 15s ./node_modules/.bin/mcp-inspector \ --cli \ --config inspector.json \ --server chrome \ --format json \ --method tools/call \ --tool-name execute_webmcp_tool \ --tool-args-json "$FILL_ARGS"The MCP command:
124because of the external GNU timeoutWebMCP.toolRespondedevent during the observation windowThe form had no
toolautosubmitattribute.Question
Is the intended browser-to-agent contract that external callers keep the tool call open until someone eventually submits or cancels the form?
If so, how should a caller distinguish this expected state from an arbitrary unresolved tool execution?
A terminal
Completedresult at the field-population boundary does not seem accurate because the form’s action has not completed. Some possible nonterminal approaches might be:ToolExecutionhandle immediately and expose the final result separately, as discussed in WebMCP tool execution progress report #196awaiting_submissionI do not have a strong preference among these. The main issue is that the successful transition from “invoked” to “form populated and awaiting submission” is currently invisible to a conventional MCP caller.
Related discussions