@forestadmin/mcp-server 1.8.0 → 1.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -20,8 +20,8 @@ type ToolResult = {
|
|
|
20
20
|
* This wrapper logs validation errors with detailed field information,
|
|
21
21
|
* which helps debug tool calls when clients send invalid arguments.
|
|
22
22
|
*
|
|
23
|
-
* Note: Execution errors are
|
|
24
|
-
*
|
|
23
|
+
* Note: Execution errors are caught and converted to { isError: true } tool results.
|
|
24
|
+
* The SSE response interceptor in server.ts additionally logs these errors from the stream.
|
|
25
25
|
*
|
|
26
26
|
* @example
|
|
27
27
|
* registerToolWithLogging(
|
|
@@ -32,8 +32,8 @@ function logValidationErrorsIfAny(args, schema, toolName, logger) {
|
|
|
32
32
|
* This wrapper logs validation errors with detailed field information,
|
|
33
33
|
* which helps debug tool calls when clients send invalid arguments.
|
|
34
34
|
*
|
|
35
|
-
* Note: Execution errors are
|
|
36
|
-
*
|
|
35
|
+
* Note: Execution errors are caught and converted to { isError: true } tool results.
|
|
36
|
+
* The SSE response interceptor in server.ts additionally logs these errors from the stream.
|
|
37
37
|
*
|
|
38
38
|
* @example
|
|
39
39
|
* registerToolWithLogging(
|
|
@@ -59,9 +59,28 @@ handler, logger) {
|
|
|
59
59
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
60
60
|
(async (args, extra) => {
|
|
61
61
|
logValidationErrorsIfAny(args, schema, toolName, logger);
|
|
62
|
-
|
|
62
|
+
// Return errors as tool results (isError: true) instead of throwing.
|
|
63
|
+
// Per MCP spec, tool errors should be reported within the result object,
|
|
64
|
+
// not as protocol-level errors, so the LLM can see and handle them.
|
|
65
|
+
// See: https://modelcontextprotocol.io/docs/concepts/tools
|
|
66
|
+
try {
|
|
67
|
+
return await handler(args, extra);
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
let message;
|
|
71
|
+
try {
|
|
72
|
+
message = error instanceof Error ? error.message : JSON.stringify(error) ?? String(error);
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
message = String(error);
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
content: [{ type: 'text', text: message }],
|
|
79
|
+
isError: true,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
63
82
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
64
83
|
}));
|
|
65
84
|
return toolName;
|
|
66
85
|
}
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC13aXRoLWxvZ2dpbmcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvdG9vbC13aXRoLWxvZ2dpbmcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFpRkEsMENBNkNDO0FBM0hELDZCQUF3QjtBQW1CeEIsZ0ZBQWdGO0FBQ2hGLHFCQUFxQjtBQUNyQixnRkFBZ0Y7QUFFaEY7OztHQUdHO0FBQ0gsU0FBUyxjQUFjLENBQUMsS0FBaUI7SUFDdkMsT0FBTyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNGLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHdCQUF3QixDQUMvQixJQUFhLEVBQ2IsTUFBbUIsRUFDbkIsUUFBZ0IsRUFDaEIsTUFBYztJQUVkLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFdEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNwQixNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELE1BQU0sQ0FBQyxPQUFPLEVBQUUsU0FBUyxRQUFRLHVCQUF1QixZQUFZLEVBQUUsQ0FBQyxDQUFDO0lBQzFFLENBQUM7QUFDSCxDQUFDO0FBRUQsZ0ZBQWdGO0FBQ2hGLG9CQUFvQjtBQUNwQixnRkFBZ0Y7QUFFaEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXdCRztBQUNILFNBQXdCLHVCQUF1QixDQUk3QyxTQUFvQixFQUNwQixRQUFnQixFQUNoQixNQUEyQjtBQUMzQiw4REFBOEQ7QUFDOUQsT0FBeUQsRUFDekQsTUFBYztJQUVkLE1BQU0sTUFBTSxHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBRTVDLFNBQVMsQ0FBQyxZQUFZLENBQ3BCLFFBQVEsRUFDUixNQUFNO0lBQ04sOERBQThEO0lBQzlELENBQUMsS0FBSyxFQUFFLElBQVMsRUFBRSxLQUFVLEVBQUUsRUFBRTtRQUMvQix3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUV6RCxxRUFBcUU7UUFDckUseUVBQXlFO1FBQ3pFLG9FQUFvRTtRQUNwRSwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLE9BQU8sQ0FBQyxJQUFhLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDN0MsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixJQUFJLE9BQWUsQ0FBQztZQUVwQixJQUFJLENBQUM7Z0JBQ0gsT0FBTyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVGLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMxQixDQUFDO1lBRUQsT0FBTztnQkFDTCxPQUFPLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2dCQUMxQyxPQUFPLEVBQUUsSUFBSTthQUNkLENBQUM7UUFDSixDQUFDO1FBQ0QsOERBQThEO0lBQ2hFLENBQUMsQ0FBUSxDQUNWLENBQUM7SUFFRixPQUFPLFFBQVEsQ0FBQztBQUNsQixDQUFDIn0=
|