Skip to content

Commit cdd503a

Browse files
fix(mcp): return tool execution error on jq failure
1 parent 184c7cd commit cdd503a

93 files changed

Lines changed: 990 additions & 317 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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/account-collection-flows/create-account-collection-flows.ts

Lines changed: 12 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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -74,7 +74,16 @@ export const tool: Tool = {
7474

7575
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
7676
const { jq_filter, ...body } = args as any;
77-
return asTextContentResult(await maybeFilter(jq_filter, await client.accountCollectionFlows.create(body)));
77+
try {
78+
return asTextContentResult(
79+
await maybeFilter(jq_filter, await client.accountCollectionFlows.create(body)),
80+
);
81+
} catch (error) {
82+
if (isJqError(error)) {
83+
return asErrorResult(error.message);
84+
}
85+
throw error;
86+
}
7887
};
7988

8089
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account-collection-flows/list-account-collection-flows.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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -57,7 +57,14 @@ export const tool: Tool = {
5757
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
5858
const { jq_filter, ...body } = args as any;
5959
const response = await client.accountCollectionFlows.list(body).asResponse();
60-
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
60+
try {
61+
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
62+
} catch (error) {
63+
if (isJqError(error)) {
64+
return asErrorResult(error.message);
65+
}
66+
throw error;
67+
}
6168
};
6269

6370
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account-collection-flows/retrieve-account-collection-flows.ts

Lines changed: 12 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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -41,7 +41,16 @@ export const tool: Tool = {
4141

4242
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
4343
const { id, jq_filter, ...body } = args as any;
44-
return asTextContentResult(await maybeFilter(jq_filter, await client.accountCollectionFlows.retrieve(id)));
44+
try {
45+
return asTextContentResult(
46+
await maybeFilter(jq_filter, await client.accountCollectionFlows.retrieve(id)),
47+
);
48+
} catch (error) {
49+
if (isJqError(error)) {
50+
return asErrorResult(error.message);
51+
}
52+
throw error;
53+
}
4554
};
4655

4756
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account-collection-flows/update-account-collection-flows.ts

Lines changed: 12 additions & 5 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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -45,9 +45,16 @@ export const tool: Tool = {
4545

4646
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
4747
const { id, jq_filter, ...body } = args as any;
48-
return asTextContentResult(
49-
await maybeFilter(jq_filter, await client.accountCollectionFlows.update(id, body)),
50-
);
48+
try {
49+
return asTextContentResult(
50+
await maybeFilter(jq_filter, await client.accountCollectionFlows.update(id, body)),
51+
);
52+
} catch (error) {
53+
if (isJqError(error)) {
54+
return asErrorResult(error.message);
55+
}
56+
throw error;
57+
}
5158
};
5259

5360
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account-details/create-account-details.ts

Lines changed: 12 additions & 5 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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -68,9 +68,16 @@ export const tool: Tool = {
6868

6969
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
7070
const { account_id, jq_filter, ...body } = args as any;
71-
return asTextContentResult(
72-
await maybeFilter(jq_filter, await client.accountDetails.create(account_id, body)),
73-
);
71+
try {
72+
return asTextContentResult(
73+
await maybeFilter(jq_filter, await client.accountDetails.create(account_id, body)),
74+
);
75+
} catch (error) {
76+
if (isJqError(error)) {
77+
return asErrorResult(error.message);
78+
}
79+
throw error;
80+
}
7481
};
7582

7683
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account-details/list-account-details.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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -57,7 +57,14 @@ export const tool: Tool = {
5757
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
5858
const { account_id, jq_filter, ...body } = args as any;
5959
const response = await client.accountDetails.list(account_id, body).asResponse();
60-
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
60+
try {
61+
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
62+
} catch (error) {
63+
if (isJqError(error)) {
64+
return asErrorResult(error.message);
65+
}
66+
throw error;
67+
}
6168
};
6269

6370
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account-details/retrieve-account-details.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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -53,7 +53,14 @@ export const tool: Tool = {
5353

5454
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
5555
const { id, jq_filter, ...body } = args as any;
56-
return asTextContentResult(await maybeFilter(jq_filter, await client.accountDetails.retrieve(id, body)));
56+
try {
57+
return asTextContentResult(await maybeFilter(jq_filter, await client.accountDetails.retrieve(id, body)));
58+
} catch (error) {
59+
if (isJqError(error)) {
60+
return asErrorResult(error.message);
61+
}
62+
throw error;
63+
}
5764
};
5865

5966
export default { metadata, tool, handler };

packages/mcp-server/src/tools/bulk-requests/list-bulk-requests.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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -74,7 +74,14 @@ export const tool: Tool = {
7474
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
7575
const { jq_filter, ...body } = args as any;
7676
const response = await client.bulkRequests.list(body).asResponse();
77-
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
77+
try {
78+
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
79+
} catch (error) {
80+
if (isJqError(error)) {
81+
return asErrorResult(error.message);
82+
}
83+
throw error;
84+
}
7885
};
7986

8087
export default { metadata, tool, handler };

packages/mcp-server/src/tools/bulk-requests/retrieve-bulk-requests.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 'modern-treasury-mcp/filtering';
4-
import { Metadata, asTextContentResult } from 'modern-treasury-mcp/tools/types';
3+
import { isJqError, maybeFilter } from 'modern-treasury-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from 'modern-treasury-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import ModernTreasury from 'modern-treasury';
@@ -41,7 +41,14 @@ export const tool: Tool = {
4141

4242
export const handler = async (client: ModernTreasury, args: Record<string, unknown> | undefined) => {
4343
const { id, jq_filter, ...body } = args as any;
44-
return asTextContentResult(await maybeFilter(jq_filter, await client.bulkRequests.retrieve(id)));
44+
try {
45+
return asTextContentResult(await maybeFilter(jq_filter, await client.bulkRequests.retrieve(id)));
46+
} catch (error) {
47+
if (isJqError(error)) {
48+
return asErrorResult(error.message);
49+
}
50+
throw error;
51+
}
4552
};
4653

4754
export default { metadata, tool, handler };

0 commit comments

Comments
 (0)