Skip to content

Commit a17ac8b

Browse files
fix(mcp): return tool execution error on jq failure
1 parent a6da6f2 commit a17ac8b

File tree

45 files changed

+478
-161
lines changed

Some content is hidden

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

45 files changed

+478
-161
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/access-tokens/create-access-tokens.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -52,7 +52,14 @@ export const tool: Tool = {
5252

5353
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
5454
const { jq_filter, ...body } = args as any;
55-
return asTextContentResult(await maybeFilter(jq_filter, await client.accessTokens.create(body)));
55+
try {
56+
return asTextContentResult(await maybeFilter(jq_filter, await client.accessTokens.create(body)));
57+
} catch (error) {
58+
if (isJqError(error)) {
59+
return asErrorResult(error.message);
60+
}
61+
throw error;
62+
}
5663
};
5764

5865
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account/disconnect-account.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -36,7 +36,14 @@ export const tool: Tool = {
3636

3737
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
3838
const { jq_filter } = args as any;
39-
return asTextContentResult(await maybeFilter(jq_filter, await client.account.disconnect()));
39+
try {
40+
return asTextContentResult(await maybeFilter(jq_filter, await client.account.disconnect()));
41+
} catch (error) {
42+
if (isJqError(error)) {
43+
return asErrorResult(error.message);
44+
}
45+
throw error;
46+
}
4047
};
4148

4249
export default { metadata, tool, handler };

packages/mcp-server/src/tools/account/introspect-account.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -38,7 +38,14 @@ export const tool: Tool = {
3838

3939
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
4040
const { jq_filter } = args as any;
41-
return asTextContentResult(await maybeFilter(jq_filter, await client.account.introspect()));
41+
try {
42+
return asTextContentResult(await maybeFilter(jq_filter, await client.account.introspect()));
43+
} catch (error) {
44+
if (isJqError(error)) {
45+
return asErrorResult(error.message);
46+
}
47+
throw error;
48+
}
4249
};
4350

4451
export default { metadata, tool, handler };

packages/mcp-server/src/tools/connect/sessions/new-connect-sessions.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -102,7 +102,14 @@ export const tool: Tool = {
102102

103103
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
104104
const { jq_filter, ...body } = args as any;
105-
return asTextContentResult(await maybeFilter(jq_filter, await client.connect.sessions.new(body)));
105+
try {
106+
return asTextContentResult(await maybeFilter(jq_filter, await client.connect.sessions.new(body)));
107+
} catch (error) {
108+
if (isJqError(error)) {
109+
return asErrorResult(error.message);
110+
}
111+
throw error;
112+
}
106113
};
107114

108115
export default { metadata, tool, handler };

packages/mcp-server/src/tools/connect/sessions/reauthenticate-connect-sessions.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

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

6969
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
7070
const { jq_filter, ...body } = args as any;
71-
return asTextContentResult(
72-
await maybeFilter(jq_filter, await client.connect.sessions.reauthenticate(body)),
73-
);
71+
try {
72+
return asTextContentResult(
73+
await maybeFilter(jq_filter, await client.connect.sessions.reauthenticate(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/hris/benefits/create-hris-benefits.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -116,7 +116,14 @@ export const tool: Tool = {
116116

117117
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
118118
const { jq_filter, ...body } = args as any;
119-
return asTextContentResult(await maybeFilter(jq_filter, await client.hris.benefits.create(body)));
119+
try {
120+
return asTextContentResult(await maybeFilter(jq_filter, await client.hris.benefits.create(body)));
121+
} catch (error) {
122+
if (isJqError(error)) {
123+
return asErrorResult(error.message);
124+
}
125+
throw error;
126+
}
120127
};
121128

122129
export default { metadata, tool, handler };

packages/mcp-server/src/tools/hris/benefits/individuals/enroll-many-benefits-hris-individuals.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -131,9 +131,16 @@ export const tool: Tool = {
131131

132132
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
133133
const { benefit_id, jq_filter, ...body } = args as any;
134-
return asTextContentResult(
135-
await maybeFilter(jq_filter, await client.hris.benefits.individuals.enrollMany(benefit_id, body)),
136-
);
134+
try {
135+
return asTextContentResult(
136+
await maybeFilter(jq_filter, await client.hris.benefits.individuals.enrollMany(benefit_id, body)),
137+
);
138+
} catch (error) {
139+
if (isJqError(error)) {
140+
return asErrorResult(error.message);
141+
}
142+
throw error;
143+
}
137144
};
138145

139146
export default { metadata, tool, handler };

packages/mcp-server/src/tools/hris/benefits/individuals/enrolled-ids-benefits-hris-individuals.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -48,9 +48,16 @@ export const tool: Tool = {
4848

4949
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
5050
const { benefit_id, jq_filter, ...body } = args as any;
51-
return asTextContentResult(
52-
await maybeFilter(jq_filter, await client.hris.benefits.individuals.enrolledIDs(benefit_id, body)),
53-
);
51+
try {
52+
return asTextContentResult(
53+
await maybeFilter(jq_filter, await client.hris.benefits.individuals.enrolledIDs(benefit_id, body)),
54+
);
55+
} catch (error) {
56+
if (isJqError(error)) {
57+
return asErrorResult(error.message);
58+
}
59+
throw error;
60+
}
5461
};
5562

5663
export default { metadata, tool, handler };

packages/mcp-server/src/tools/hris/benefits/individuals/retrieve-many-benefits-benefits-hris-individuals.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 '@tryfinch/finch-api-mcp/filtering';
4-
import { Metadata, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
3+
import { isJqError, maybeFilter } from '@tryfinch/finch-api-mcp/filtering';
4+
import { Metadata, asErrorResult, asTextContentResult } from '@tryfinch/finch-api-mcp/tools/types';
55

66
import { Tool } from '@modelcontextprotocol/sdk/types.js';
77
import Finch from '@tryfinch/finch-api';
@@ -54,7 +54,14 @@ export const tool: Tool = {
5454
export const handler = async (client: Finch, args: Record<string, unknown> | undefined) => {
5555
const { benefit_id, jq_filter, ...body } = args as any;
5656
const response = await client.hris.benefits.individuals.retrieveManyBenefits(benefit_id, body).asResponse();
57-
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
57+
try {
58+
return asTextContentResult(await maybeFilter(jq_filter, await response.json()));
59+
} catch (error) {
60+
if (isJqError(error)) {
61+
return asErrorResult(error.message);
62+
}
63+
throw error;
64+
}
5865
};
5966

6067
export default { metadata, tool, handler };

0 commit comments

Comments
 (0)