Claude Desktop: prompt-input dialog never calls completion/complete, ignores required:false, and caches prompt definitions for the whole session
Environment: Claude Desktop v1.26832.0, Windows 11 Enterprise, local stdio MCP server.
Our server exposes prompts whose one argument is a Salesforce case number, and implements completion/complete over that argument (typing a customer name returns matching cases; an EMPTY value returns the user's full open-case list, so a dropdown could populate with zero typing). Three client behaviors defeat the mechanism the spec provides:
1. completion/complete is never called
The "Enter prompt inputs" dialog renders a bare free-text field. No completion request reaches the server at any point (verified from the server's own request log during dialog interaction). Server-side suggestions have no client surface at all.
2. required: false is not honored
With an argument declared optional, the dialog keeps "Add prompt" disabled while the field is empty - an optional argument cannot be omitted.
3. Prompt definitions are cached once per session and never invalidated
Likely related to #7519. Strongest evidence: we REMOVED both prompts' arguments entirely in a new server build. Our host process demonstrably restarted the server child on the new build (child process creation times align with the deploy) and emitted notifications/prompts/list_changed - yet the input dialog kept rendering the original required-argument definitions from session start. Only a client restart or a connector re-toggle flushes them. Because the change was a REMOVAL, this is not a stale-description cosmetic: the dialog demands arguments the server no longer declares.
Repro (cache):
- Connect a stdio server whose prompt declares an argument; open the prompt dialog once.
- Swap the server binary for one whose prompt declares NO arguments; restart the server process (same connector) and emit
prompts/list_changed. - Open the prompt dialog again: it still shows the removed argument. Restarting Desktop shows the correct zero-argument prompt.
Expected: re-fetch prompt definitions on prompts/list_changed (or at dialog-open); call completion/complete (debounced) for arguments whose server declares the completions capability, rendering a searchable combobox with empty-input completion seeding the initial list; enable submit when every empty field is optional.
Workaround we shipped: zero-argument prompts that instruct the model to detect the target from the chat or list options in-chat and wait - it works but spends a model round-trip to do what one dropdown could.
Working server-side completion handler for reference: https://gist.github.com/layibabalola/77616813ce7bfdd28b569c29b2e508d3
Companion MCP spec proposal (input-kind hints on PromptArgument): https://github.com/modelcontextprotocol/modelcontextprotocol/discussions/3222
Screenshots of the dialog ignoring completions and of the stale-definition repro available on request.