Mark the URL
- Restier / controllers
- ModelBuilder
[McpElicitUrl], the host looks for connectUri, url, authorizationUrl, or verificationUri on that JSON. Names that look like secrets (token, password, code) are ignored on purpose.
Pair it with [McpTask] / HasMcpTask() so the harness waits while the operator is in the browser.
Wait until your callback fires
context has the action name, the entity key, and the Started JSON. Return null to keep that Started payload.
Without a waiter, the harness still shows the URL, then the call ends. The operator finishing in the browser never comes back on MCP.
If the harness cannot show a URL, they get the Started ticket and the human says when they are done.
If you also enabled Tasks
If you also enabled Tasks
The same elicitation is nested on the task. The operator accepts or declines; accept runs the waiter; decline skips it. Pair
WithTasks and WaitForAnnotatedAction in the same AddODataMcp callback.