Skip to content

Commit 725aff7

Browse files
authored
Update elicitation schema (#2193)
1 parent 2068b05 commit 725aff7

2 files changed

Lines changed: 12 additions & 9 deletions

File tree

core/Azure.Mcp.Core/tests/Azure.Mcp.Core.UnitTests/Areas/Server/Commands/ToolLoading/BaseToolLoaderTests.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ public async Task HandleSecretElicitation_WhenUserDeclines_RejectsOperation()
420420
}
421421

422422
[Fact]
423-
public async Task HandleSecretElicitation_UsesConfirmSchemaProperty()
423+
public async Task HandleSecretElicitation_UsesDecisionEnumSchema()
424424
{
425425
// Arrange
426426
var mockServer = Substitute.For<McpServer>();
@@ -452,18 +452,20 @@ public async Task HandleSecretElicitation_UsesConfirmSchemaProperty()
452452
await TestableBaseToolLoader.HandleSecretElicitationAsyncPublic(
453453
request, "test-tool", dangerouslyDisableElicitation: false, logger, CancellationToken.None);
454454

455-
// Assert - verify the schema has a confirm boolean property
455+
// Assert - verify the schema has a decision single-select enum property with approve/reject
456456
Assert.NotNull(capturedRequest);
457457
Assert.NotNull(capturedRequest.Params);
458458
var elicitParams = JsonSerializer.Deserialize<ElicitRequestParams>(capturedRequest.Params.ToJsonString());
459459
Assert.NotNull(elicitParams);
460460
Assert.NotNull(elicitParams.RequestedSchema);
461461
Assert.NotNull(elicitParams.RequestedSchema.Properties);
462462
Assert.Single(elicitParams.RequestedSchema.Properties);
463-
Assert.True(elicitParams.RequestedSchema.Properties.ContainsKey("confirm"));
463+
Assert.True(elicitParams.RequestedSchema.Properties.ContainsKey("decision"));
464+
var decisionSchema = Assert.IsType<ElicitRequestParams.UntitledSingleSelectEnumSchema>(elicitParams.RequestedSchema.Properties["decision"]);
465+
Assert.Equal(["Approve", "Reject"], decisionSchema.Enum);
464466
Assert.NotNull(elicitParams.RequestedSchema.Required);
465467
Assert.Single(elicitParams.RequestedSchema.Required);
466-
Assert.Contains("confirm", elicitParams.RequestedSchema.Required);
468+
Assert.Contains("decision", elicitParams.RequestedSchema.Required);
467469
}
468470

469471
[Fact]

core/Microsoft.Mcp.Core/src/Areas/Server/Commands/ToolLoading/BaseToolLoader.cs

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -192,21 +192,22 @@ protected McpClientOptions CreateClientOptions(McpServer server)
192192
{
193193
logger.LogInformation("Tool '{Tool}' handles sensitive data. Requesting user confirmation via elicitation.", toolName);
194194

195-
// Create the elicitation request with a confirmation checkbox
195+
// Create the elicitation request with a single-select enum for approve/reject
196196
var protocolRequest = new ElicitRequestParams
197197
{
198198
Message = $"⚠️ SECURITY WARNING: The tool '{toolName}' may expose secrets or sensitive information.\n\nThis operation could reveal confidential data such as passwords, API keys, certificates, or other sensitive values.\n\nDo you want to continue with this potentially sensitive operation?",
199199
RequestedSchema = new()
200200
{
201201
Properties = new Dictionary<string, ElicitRequestParams.PrimitiveSchemaDefinition>
202202
{
203-
["confirm"] = new ElicitRequestParams.BooleanSchema
203+
["decision"] = new ElicitRequestParams.UntitledSingleSelectEnumSchema
204204
{
205-
Title = "Confirm",
206-
Description = "I confirm that I want to proceed with this sensitive operation."
205+
Title = "Decision",
206+
Description = "Approve or reject this sensitive operation.",
207+
Enum = ["Approve", "Reject"]
207208
}
208209
},
209-
Required = ["confirm"]
210+
Required = ["decision"]
210211
}
211212
};
212213

0 commit comments

Comments
 (0)