Skip to content

Feature: Support MCP elicitation (human-in-the-loop approval for write operations) #1001

@ericchansen

Description

@ericchansen

Problem

MCP servers that perform write operations (e.g., updating a CRM, creating records in Dataverse, posting to external APIs) use MCP elicitation to get human approval before executing destructive or irreversible changes. This is a security-critical pattern -- the agent builds a preview of the change and the MCP server pauses until the human explicitly approves or rejects it.

Currently, the GitHub Copilot app (desktop) does not advertise the elicitation capability to MCP servers. This means any MCP tool that requires human-in-the-loop confirmation silently fails with an error like:

dataverse_write requires a client that supports MCP elicitation so a human can approve the change before it executes -- this MCP client does not advertise the elicitation capability.

This affects both chat sessions and project sessions.

Expected Behavior

When an MCP server requests elicitation, the app should present an inline approval UI (similar to how ask_user works for the agent) showing:

  1. A preview of the proposed action (provided by the MCP server)
  2. Accept / Reject buttons
  3. The MCP server response is held until the user decides

This is the same pattern GitHub Copilot CLI supports in its interactive terminal mode.

Use Case

Any MCP server that writes to external systems benefits from this:

  • CRM/Dataverse writes (creating tasks, updating records)
  • Database mutations
  • Cloud resource provisioning
  • File system writes on remote systems
  • Any action where "undo" is expensive or impossible

Suggested Implementation

The MCP spec defines elicitation as a client capability. The app would need to:

  1. Advertise elicitation in its MCP client capabilities during initialization
  2. Render the elicitation request (typically a JSON schema form or a confirmation dialog) in the chat/session UI
  3. Return the user's response to the MCP server so it can proceed or abort

References

  • MCP Elicitation Spec
  • GitHub Copilot CLI already supports this in interactive terminal mode (issues #1863, #1872, #1873 were UX fixes for it)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions