Skip to content

Commit b36d83b

Browse files
fix(mcp): return tool execution error on jq failure
1 parent 63e29fe commit b36d83b

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

packages/mcp-server/src/filtering.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,7 @@ export async function maybeFilter(jqFilter: unknown | undefined, response: any):
1212
async function jq(json: any, jqFilter: string) {
1313
return (await initJq).json(json, jqFilter);
1414
}
15+
16+
export function isJqError(error: any): error is Error {
17+
return error instanceof Error && 'stderr' in error;
18+
}

packages/mcp-server/src/tools/cas-generator/generate-cas-cas-generator.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

3-
import { maybeFilter } from 'cas-parser-node-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'cas-parser-node-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'cas-parser-node-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'cas-parser-node-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import CasParser from 'cas-parser-node';
@@ -61,7 +61,14 @@ export const tool: Tool = {
6161

6262
export const handler = async (client: CasParser, args: Record<string, unknown> | undefined) => {
6363
const { jq_filter, ...body } = args as any;
64-
return asTextContentResult(await maybeFilter(jq_filter, await client.casGenerator.generateCas(body)));
64+
try {
65+
return asTextContentResult(await maybeFilter(jq_filter, await client.casGenerator.generateCas(body)));
66+
} catch (error) {
67+
if (isJqError(error)) {
68+
return asErrorResult(error.message);
69+
}
70+
throw error;
71+
}
6572
};
6673

6774
export default { metadata, tool, handler };

packages/mcp-server/src/tools/types.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,18 @@ export async function asBinaryContentResult(response: Response): Promise<ToolCal
8787
}
8888
}
8989

90+
export function asErrorResult(message: string): ToolCallResult {
91+
return {
92+
content: [
93+
{
94+
type: 'text',
95+
text: message,
96+
},
97+
],
98+
isError: true,
99+
};
100+
}
101+
90102
export type Metadata = {
91103
resource: string;
92104
operation: 'read' | 'write';

0 commit comments

Comments
 (0)