Propagate tool call exceptions through filters (#844)

* Add McpProtocolException specifically for JSON-RPC errors
This commit is contained in:
Stephen Halter 2025-10-14 21:10:55 -05:00 • committed by GitHub
commit 3255adb4d6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -78,7 +78,7 @@ internal sealed class AuthorizationFilterSetup(IAuthorizationPolicyProvider? pol
var authResult = await GetAuthorizationResultAsync(context.User, context.MatchedPrimitive, context.Services, context);
if (!authResult.Succeeded)
{
throw new McpException("Access forbidden: This tool requires authorization.", McpErrorCode.InvalidRequest);
throw new McpProtocolException("Access forbidden: This tool requires authorization.", McpErrorCode.InvalidRequest);
}
context.Items[AuthorizationFilterInvokedKey] = true;
@ -170,7 +170,7 @@ internal sealed class AuthorizationFilterSetup(IAuthorizationPolicyProvider? pol
var authResult = await GetAuthorizationResultAsync(context.User, context.MatchedPrimitive, context.Services, context);
if (!authResult.Succeeded)
{
throw new McpException("Access forbidden: This resource requires authorization.", McpErrorCode.InvalidRequest);
throw new McpProtocolException("Access forbidden: This resource requires authorization.", McpErrorCode.InvalidRequest);
}
return await next(context, cancellationToken);
@ -230,7 +230,7 @@ internal sealed class AuthorizationFilterSetup(IAuthorizationPolicyProvider? pol
var authResult = await GetAuthorizationResultAsync(context.User, context.MatchedPrimitive, context.Services, context);
if (!authResult.Succeeded)
{
throw new McpException("Access forbidden: This prompt requires authorization.", McpErrorCode.InvalidRequest);
throw new McpProtocolException("Access forbidden: This prompt requires authorization.", McpErrorCode.InvalidRequest);
}
return await next(context, cancellationToken);