Skip to content

Commit 7886dae

Browse files
fix(mcp): return tool execution error on api error
1 parent 6ecc636 commit 7886dae

File tree

8 files changed

+72
-16
lines changed

8 files changed

+72
-16
lines changed

packages/mcp-server/src/tools/accounts/get-accounts.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -28,7 +28,14 @@ export const tool: Tool = {
2828
};
2929

3030
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
31-
return asTextContentResult(await client.accounts.list());
31+
try {
32+
return asTextContentResult(await client.accounts.list());
33+
} catch (error) {
34+
if (error instanceof BeeperDesktop.APIError) {
35+
return asErrorResult(error.message);
36+
}
37+
throw error;
38+
}
3239
};
3340

3441
export default { metadata, tool, handler };

packages/mcp-server/src/tools/chats/get-chat.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -39,7 +39,14 @@ export const tool: Tool = {
3939

4040
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
4141
const { chatID, ...body } = args as any;
42-
return asTextContentResult(await client.chats.retrieve(chatID, body));
42+
try {
43+
return asTextContentResult(await client.chats.retrieve(chatID, body));
44+
} catch (error) {
45+
if (error instanceof BeeperDesktop.APIError) {
46+
return asErrorResult(error.message);
47+
}
48+
throw error;
49+
}
4350
};
4451

4552
export default { metadata, tool, handler };

packages/mcp-server/src/tools/chats/search-chats.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -98,7 +98,14 @@ export const tool: Tool = {
9898
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
9999
const body = args as any;
100100
const response = await client.chats.search(body).asResponse();
101-
return asTextContentResult(await response.json());
101+
try {
102+
return asTextContentResult(await response.json());
103+
} catch (error) {
104+
if (error instanceof BeeperDesktop.APIError) {
105+
return asErrorResult(error.message);
106+
}
107+
throw error;
108+
}
102109
};
103110

104111
export default { metadata, tool, handler };

packages/mcp-server/src/tools/messages/list-messages.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -45,7 +45,14 @@ export const tool: Tool = {
4545
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
4646
const { chatID, ...body } = args as any;
4747
const response = await client.messages.list(chatID, body).asResponse();
48-
return asTextContentResult(await response.json());
48+
try {
49+
return asTextContentResult(await response.json());
50+
} catch (error) {
51+
if (error instanceof BeeperDesktop.APIError) {
52+
return asErrorResult(error.message);
53+
}
54+
throw error;
55+
}
4956
};
5057

5158
export default { metadata, tool, handler };

packages/mcp-server/src/tools/messages/search-messages.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -117,7 +117,14 @@ export const tool: Tool = {
117117
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
118118
const body = args as any;
119119
const response = await client.messages.search(body).asResponse();
120-
return asTextContentResult(await response.json());
120+
try {
121+
return asTextContentResult(await response.json());
122+
} catch (error) {
123+
if (error instanceof BeeperDesktop.APIError) {
124+
return asErrorResult(error.message);
125+
}
126+
throw error;
127+
}
121128
};
122129

123130
export default { metadata, tool, handler };

packages/mcp-server/src/tools/messages/send-message.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -41,7 +41,14 @@ export const tool: Tool = {
4141

4242
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
4343
const { chatID, ...body } = args as any;
44-
return asTextContentResult(await client.messages.send(chatID, body));
44+
try {
45+
return asTextContentResult(await client.messages.send(chatID, body));
46+
} catch (error) {
47+
if (error instanceof BeeperDesktop.APIError) {
48+
return asErrorResult(error.message);
49+
}
50+
throw error;
51+
}
4552
};
4653

4754
export default { metadata, tool, handler };

packages/mcp-server/src/tools/top-level/focus-app.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -46,7 +46,14 @@ export const tool: Tool = {
4646

4747
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
4848
const body = args as any;
49-
return asTextContentResult(await client.focus(body));
49+
try {
50+
return asTextContentResult(await client.focus(body));
51+
} catch (error) {
52+
if (error instanceof BeeperDesktop.APIError) {
53+
return asErrorResult(error.message);
54+
}
55+
throw error;
56+
}
5057
};
5158

5259
export default { metadata, tool, handler };

packages/mcp-server/src/tools/top-level/search.ts

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

3-
import { Metadata, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
3+
import { Metadata, asErrorResult, asTextContentResult } from '@beeper/desktop-mcp/tools/types';
44

55
import { Tool } from '@modelcontextprotocol/sdk/types.js';
66
import BeeperDesktop from '@beeper/desktop-api';
@@ -35,7 +35,14 @@ export const tool: Tool = {
3535

3636
export const handler = async (client: BeeperDesktop, args: Record<string, unknown> | undefined) => {
3737
const body = args as any;
38-
return asTextContentResult(await client.search(body));
38+
try {
39+
return asTextContentResult(await client.search(body));
40+
} catch (error) {
41+
if (error instanceof BeeperDesktop.APIError) {
42+
return asErrorResult(error.message);
43+
}
44+
throw error;
45+
}
3946
};
4047

4148
export default { metadata, tool, handler };

0 commit comments

Comments
 (0)