Propagate tool call exceptions through filters (#844)
* Add McpProtocolException specifically for JSON-RPC errors
This commit is contained in:
parent
2c9558cf21
commit
3255adb4d6
1 changed files with 334 additions and 163 deletions
|
|
@ -1,14 +1,21 @@
|
|||
using ModelContextProtocol.Protocol;
|
||||
|
||||
namespace ModelContextProtocol;
|
||||
|
||||
/// <summary>
|
||||
/// Represents an exception that is thrown when an Model Context Protocol (MCP) error occurs.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This exception is used to represent failures to do with protocol-level concerns, such as invalid JSON-RPC requests,
|
||||
/// invalid parameters, or internal errors. It is not intended to be used for application-level errors.
|
||||
/// <see cref="Exception.Message"/> or <see cref="ErrorCode"/> from a <see cref="McpException"/> may be
|
||||
/// propagated to the remote endpoint; sensitive information should not be included. If sensitive details need
|
||||
/// to be included, a different exception type should be used.
|
||||
/// The <see cref="Exception.Message"/> from a <see cref="McpException"/> may be propagated to the remote
|
||||
/// endpoint; sensitive information should not be included. If sensitive details need to be included,
|
||||
/// a different exception type should be used.
|
||||
///
|
||||
/// This exception type can be thrown by MCP tools or tool call filters to propagate detailed error messages
|
||||
/// from <see cref="Exception.Message"/> when a tool execution fails via a <see cref="CallToolResult"/>.
|
||||
/// For non-tool calls, this exception controls the message propogated via a <see cref="JsonRpcError"/>.
|
||||
///
|
||||
/// <see cref="McpProtocolException"/> is a derived type that can be used to also specify the
|
||||
/// <see cref="McpErrorCode"/> that should be used for the resulting <see cref="JsonRpcError"/>.
|
||||
/// </remarks>
|
||||
public class McpException : Exception
|
||||
{
|
||||
|
|
@ -28,46 +35,13 @@ public class McpException : Exception
|
|||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="McpException"/> class with a specified error message and a reference to the inner exception that is the cause of this exception.
|
||||
/// Initializes a new instance of the <see cref="McpException"/> class with a specified error message and
|
||||
/// a reference to the inner exception that is the cause of this exception.
|
||||
/// </summary>
|
||||
/// <param name="message">The message that describes the error.</param>
|
||||
/// <param name="innerException">The exception that is the cause of the current exception, or a null reference if no inner exception is specified.</param>
|
||||
/// <param name="innerException">The exception that is the cause of the current exception, or a null
|
||||
/// reference if no inner exception is specified.</param>
|
||||
public McpException(string message, Exception? innerException) : base(message, innerException)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="McpException"/> class with a specified error message and JSON-RPC error code.
|
||||
/// </summary>
|
||||
/// <param name="message">The message that describes the error.</param>
|
||||
/// <param name="errorCode">A <see cref="McpErrorCode"/>.</param>
|
||||
public McpException(string message, McpErrorCode errorCode) : this(message, null, errorCode)
|
||||
{
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Initializes a new instance of the <see cref="McpException"/> class with a specified error message, inner exception, and JSON-RPC error code.
|
||||
/// </summary>
|
||||
/// <param name="message">The message that describes the error.</param>
|
||||
/// <param name="innerException">The exception that is the cause of the current exception, or a null reference if no inner exception is specified.</param>
|
||||
/// <param name="errorCode">A <see cref="McpErrorCode"/>.</param>
|
||||
public McpException(string message, Exception? innerException, McpErrorCode errorCode) : base(message, innerException)
|
||||
{
|
||||
ErrorCode = errorCode;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the error code associated with this exception.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// This property contains a standard JSON-RPC error code as defined in the MCP specification. Common error codes include:
|
||||
/// <list type="bullet">
|
||||
/// <item><description>-32700: Parse error - Invalid JSON received</description></item>
|
||||
/// <item><description>-32600: Invalid request - The JSON is not a valid Request object</description></item>
|
||||
/// <item><description>-32601: Method not found - The method does not exist or is not available</description></item>
|
||||
/// <item><description>-32602: Invalid params - Invalid method parameters</description></item>
|
||||
/// <item><description>-32603: Internal error - Internal JSON-RPC error</description></item>
|
||||
/// </list>
|
||||
/// </remarks>
|
||||
public McpErrorCode ErrorCode { get; } = McpErrorCode.InternalError;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue