cas-parser-node-mcp 1.4.1 → 1.7.2

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.
Files changed (227) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +29 -147
  3. package/auth.d.mts +6 -0
  4. package/auth.d.mts.map +1 -0
  5. package/auth.d.ts +6 -0
  6. package/auth.d.ts.map +1 -0
  7. package/auth.js +22 -0
  8. package/auth.js.map +1 -0
  9. package/auth.mjs +17 -0
  10. package/auth.mjs.map +1 -0
  11. package/code-tool-types.d.mts +7 -7
  12. package/code-tool-types.d.mts.map +1 -1
  13. package/code-tool-types.d.ts +7 -7
  14. package/code-tool-types.d.ts.map +1 -1
  15. package/code-tool.d.mts +6 -3
  16. package/code-tool.d.mts.map +1 -1
  17. package/code-tool.d.ts +6 -3
  18. package/code-tool.d.ts.map +1 -1
  19. package/code-tool.js +86 -133
  20. package/code-tool.js.map +1 -1
  21. package/code-tool.mjs +86 -100
  22. package/code-tool.mjs.map +1 -1
  23. package/{tools/cas-generator/generate-cas-cas-generator.d.ts → docs-search-tool.d.mts} +23 -11
  24. package/docs-search-tool.d.mts.map +1 -0
  25. package/{tools/cas-generator/generate-cas-cas-generator.d.mts → docs-search-tool.d.ts} +23 -11
  26. package/docs-search-tool.d.ts.map +1 -0
  27. package/docs-search-tool.js +55 -0
  28. package/docs-search-tool.js.map +1 -0
  29. package/docs-search-tool.mjs +51 -0
  30. package/docs-search-tool.mjs.map +1 -0
  31. package/http.d.mts +9 -4
  32. package/http.d.mts.map +1 -1
  33. package/http.d.ts +9 -4
  34. package/http.d.ts.map +1 -1
  35. package/http.js +35 -48
  36. package/http.js.map +1 -1
  37. package/http.mjs +35 -48
  38. package/http.mjs.map +1 -1
  39. package/index.js +8 -40
  40. package/index.js.map +1 -1
  41. package/index.mjs +8 -40
  42. package/index.mjs.map +1 -1
  43. package/instructions.d.mts +2 -0
  44. package/instructions.d.mts.map +1 -0
  45. package/instructions.d.ts +2 -0
  46. package/instructions.d.ts.map +1 -0
  47. package/instructions.js +55 -0
  48. package/instructions.js.map +1 -0
  49. package/instructions.mjs +52 -0
  50. package/instructions.mjs.map +1 -0
  51. package/methods.d.mts +10 -0
  52. package/methods.d.mts.map +1 -0
  53. package/methods.d.ts +10 -0
  54. package/methods.d.ts.map +1 -0
  55. package/methods.js +167 -0
  56. package/methods.js.map +1 -0
  57. package/methods.mjs +163 -0
  58. package/methods.mjs.map +1 -0
  59. package/options.d.mts +6 -9
  60. package/options.d.mts.map +1 -1
  61. package/options.d.ts +6 -9
  62. package/options.d.ts.map +1 -1
  63. package/options.js +42 -360
  64. package/options.js.map +1 -1
  65. package/options.mjs +42 -360
  66. package/options.mjs.map +1 -1
  67. package/package.json +67 -79
  68. package/server.d.mts +10 -16
  69. package/server.d.mts.map +1 -1
  70. package/server.d.ts +10 -16
  71. package/server.d.ts.map +1 -1
  72. package/server.js +89 -101
  73. package/server.js.map +1 -1
  74. package/server.mjs +88 -96
  75. package/server.mjs.map +1 -1
  76. package/src/auth.ts +25 -0
  77. package/src/code-tool-types.ts +7 -5
  78. package/src/code-tool.ts +113 -117
  79. package/src/docs-search-tool.ts +68 -0
  80. package/src/http.ts +52 -52
  81. package/src/index.ts +9 -52
  82. package/src/instructions.ts +74 -0
  83. package/src/methods.ts +188 -0
  84. package/src/options.ts +55 -382
  85. package/src/server.ts +98 -117
  86. package/src/stdio.ts +4 -4
  87. package/src/{tools/types.ts → types.ts} +25 -5
  88. package/src/util.ts +25 -0
  89. package/stdio.d.mts +1 -1
  90. package/stdio.d.mts.map +1 -1
  91. package/stdio.d.ts +1 -1
  92. package/stdio.d.ts.map +1 -1
  93. package/stdio.js +3 -3
  94. package/stdio.js.map +1 -1
  95. package/stdio.mjs +3 -3
  96. package/stdio.mjs.map +1 -1
  97. package/{tools/types.d.mts → types.d.mts} +10 -2
  98. package/types.d.mts.map +1 -0
  99. package/{tools/types.d.ts → types.d.ts} +10 -2
  100. package/types.d.ts.map +1 -0
  101. package/{tools/types.js → types.js} +12 -0
  102. package/types.js.map +1 -0
  103. package/{tools/types.mjs → types.mjs} +11 -0
  104. package/types.mjs.map +1 -0
  105. package/util.d.mts +4 -0
  106. package/util.d.mts.map +1 -0
  107. package/util.d.ts +4 -0
  108. package/util.d.ts.map +1 -0
  109. package/util.js +30 -0
  110. package/util.js.map +1 -0
  111. package/util.mjs +24 -0
  112. package/util.mjs.map +1 -0
  113. package/code-tool-paths.cjs +0 -6
  114. package/code-tool-paths.cjs.map +0 -1
  115. package/code-tool-paths.d.cts +0 -2
  116. package/code-tool-paths.d.cts.map +0 -1
  117. package/code-tool-worker.d.mts +0 -5
  118. package/code-tool-worker.d.mts.map +0 -1
  119. package/code-tool-worker.d.ts +0 -5
  120. package/code-tool-worker.d.ts.map +0 -1
  121. package/code-tool-worker.js +0 -45
  122. package/code-tool-worker.js.map +0 -1
  123. package/code-tool-worker.mjs +0 -40
  124. package/code-tool-worker.mjs.map +0 -1
  125. package/compat.d.mts +0 -58
  126. package/compat.d.mts.map +0 -1
  127. package/compat.d.ts +0 -58
  128. package/compat.d.ts.map +0 -1
  129. package/compat.js +0 -387
  130. package/compat.js.map +0 -1
  131. package/compat.mjs +0 -378
  132. package/compat.mjs.map +0 -1
  133. package/dynamic-tools.d.mts +0 -12
  134. package/dynamic-tools.d.mts.map +0 -1
  135. package/dynamic-tools.d.ts +0 -12
  136. package/dynamic-tools.d.ts.map +0 -1
  137. package/dynamic-tools.js +0 -135
  138. package/dynamic-tools.js.map +0 -1
  139. package/dynamic-tools.mjs +0 -132
  140. package/dynamic-tools.mjs.map +0 -1
  141. package/filtering.d.mts +0 -2
  142. package/filtering.d.mts.map +0 -1
  143. package/filtering.d.ts +0 -2
  144. package/filtering.d.ts.map +0 -1
  145. package/filtering.js +0 -20
  146. package/filtering.js.map +0 -1
  147. package/filtering.mjs +0 -13
  148. package/filtering.mjs.map +0 -1
  149. package/headers.d.mts +0 -4
  150. package/headers.d.mts.map +0 -1
  151. package/headers.d.ts +0 -4
  152. package/headers.d.ts.map +0 -1
  153. package/headers.js +0 -10
  154. package/headers.js.map +0 -1
  155. package/headers.mjs +0 -6
  156. package/headers.mjs.map +0 -1
  157. package/src/code-tool-paths.cts +0 -3
  158. package/src/code-tool-worker.ts +0 -46
  159. package/src/compat.ts +0 -483
  160. package/src/dynamic-tools.ts +0 -159
  161. package/src/filtering.ts +0 -14
  162. package/src/headers.ts +0 -10
  163. package/src/tools/cas-generator/generate-cas-cas-generator.ts +0 -67
  164. package/src/tools/cas-parser/cams-kfintech-cas-parser.ts +0 -47
  165. package/src/tools/cas-parser/cdsl-cas-parser.ts +0 -47
  166. package/src/tools/cas-parser/nsdl-cas-parser.ts +0 -47
  167. package/src/tools/cas-parser/smart-parse-cas-parser.ts +0 -47
  168. package/src/tools/index.ts +0 -79
  169. package/src/tools.ts +0 -1
  170. package/tools/cas-generator/generate-cas-cas-generator.d.mts.map +0 -1
  171. package/tools/cas-generator/generate-cas-cas-generator.d.ts.map +0 -1
  172. package/tools/cas-generator/generate-cas-cas-generator.js +0 -62
  173. package/tools/cas-generator/generate-cas-cas-generator.js.map +0 -1
  174. package/tools/cas-generator/generate-cas-cas-generator.mjs +0 -58
  175. package/tools/cas-generator/generate-cas-cas-generator.mjs.map +0 -1
  176. package/tools/cas-parser/cams-kfintech-cas-parser.d.mts +0 -45
  177. package/tools/cas-parser/cams-kfintech-cas-parser.d.mts.map +0 -1
  178. package/tools/cas-parser/cams-kfintech-cas-parser.d.ts +0 -45
  179. package/tools/cas-parser/cams-kfintech-cas-parser.d.ts.map +0 -1
  180. package/tools/cas-parser/cams-kfintech-cas-parser.js +0 -43
  181. package/tools/cas-parser/cams-kfintech-cas-parser.js.map +0 -1
  182. package/tools/cas-parser/cams-kfintech-cas-parser.mjs +0 -39
  183. package/tools/cas-parser/cams-kfintech-cas-parser.mjs.map +0 -1
  184. package/tools/cas-parser/cdsl-cas-parser.d.mts +0 -45
  185. package/tools/cas-parser/cdsl-cas-parser.d.mts.map +0 -1
  186. package/tools/cas-parser/cdsl-cas-parser.d.ts +0 -45
  187. package/tools/cas-parser/cdsl-cas-parser.d.ts.map +0 -1
  188. package/tools/cas-parser/cdsl-cas-parser.js +0 -43
  189. package/tools/cas-parser/cdsl-cas-parser.js.map +0 -1
  190. package/tools/cas-parser/cdsl-cas-parser.mjs +0 -39
  191. package/tools/cas-parser/cdsl-cas-parser.mjs.map +0 -1
  192. package/tools/cas-parser/nsdl-cas-parser.d.mts +0 -45
  193. package/tools/cas-parser/nsdl-cas-parser.d.mts.map +0 -1
  194. package/tools/cas-parser/nsdl-cas-parser.d.ts +0 -45
  195. package/tools/cas-parser/nsdl-cas-parser.d.ts.map +0 -1
  196. package/tools/cas-parser/nsdl-cas-parser.js +0 -43
  197. package/tools/cas-parser/nsdl-cas-parser.js.map +0 -1
  198. package/tools/cas-parser/nsdl-cas-parser.mjs +0 -39
  199. package/tools/cas-parser/nsdl-cas-parser.mjs.map +0 -1
  200. package/tools/cas-parser/smart-parse-cas-parser.d.mts +0 -45
  201. package/tools/cas-parser/smart-parse-cas-parser.d.mts.map +0 -1
  202. package/tools/cas-parser/smart-parse-cas-parser.d.ts +0 -45
  203. package/tools/cas-parser/smart-parse-cas-parser.d.ts.map +0 -1
  204. package/tools/cas-parser/smart-parse-cas-parser.js +0 -43
  205. package/tools/cas-parser/smart-parse-cas-parser.js.map +0 -1
  206. package/tools/cas-parser/smart-parse-cas-parser.mjs +0 -39
  207. package/tools/cas-parser/smart-parse-cas-parser.mjs.map +0 -1
  208. package/tools/index.d.mts +0 -10
  209. package/tools/index.d.mts.map +0 -1
  210. package/tools/index.d.ts +0 -10
  211. package/tools/index.d.ts.map +0 -1
  212. package/tools/index.js +0 -63
  213. package/tools/index.js.map +0 -1
  214. package/tools/index.mjs +0 -56
  215. package/tools/index.mjs.map +0 -1
  216. package/tools/types.d.mts.map +0 -1
  217. package/tools/types.d.ts.map +0 -1
  218. package/tools/types.js.map +0 -1
  219. package/tools/types.mjs.map +0 -1
  220. package/tools.d.mts +0 -2
  221. package/tools.d.mts.map +0 -1
  222. package/tools.d.ts +0 -2
  223. package/tools.d.ts.map +0 -1
  224. package/tools.js +0 -18
  225. package/tools.js.map +0 -1
  226. package/tools.mjs +0 -2
  227. package/tools.mjs.map +0 -1
package/src/server.ts CHANGED
@@ -2,74 +2,44 @@
2
2
 
3
3
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
4
4
  import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
5
- import { Endpoint, endpoints, HandlerFunction, query } from './tools';
6
5
  import {
7
6
  CallToolRequestSchema,
8
7
  ListToolsRequestSchema,
9
8
  SetLevelRequestSchema,
10
- Implementation,
11
- Tool,
12
9
  } from '@modelcontextprotocol/sdk/types.js';
13
10
  import { ClientOptions } from 'cas-parser-node';
14
11
  import CasParser from 'cas-parser-node';
15
- import {
16
- applyCompatibilityTransformations,
17
- ClientCapabilities,
18
- defaultClientCapabilities,
19
- knownClients,
20
- parseEmbeddedJSON,
21
- } from './compat';
22
- import { dynamicTools } from './dynamic-tools';
23
12
  import { codeTool } from './code-tool';
13
+ import docsSearchTool from './docs-search-tool';
14
+ import { getInstructions } from './instructions';
24
15
  import { McpOptions } from './options';
16
+ import { blockedMethodsForCodeTool } from './methods';
17
+ import { HandlerFunction, McpRequestContext, ToolCallResult, McpTool } from './types';
18
+ import { readEnv } from './util';
25
19
 
26
- export { McpOptions } from './options';
27
- export { ClientType } from './compat';
28
- export { Filter } from './tools';
29
- export { ClientOptions } from 'cas-parser-node';
30
- export { endpoints } from './tools';
31
-
32
- export const newMcpServer = () =>
20
+ export const newMcpServer = async (stainlessApiKey: string | undefined) =>
33
21
  new McpServer(
34
22
  {
35
23
  name: 'cas_parser_node_api',
36
- version: '1.4.1',
24
+ version: '1.7.2',
25
+ },
26
+ {
27
+ instructions: await getInstructions(stainlessApiKey),
28
+ capabilities: { tools: {}, logging: {} },
37
29
  },
38
- { capabilities: { tools: {}, logging: {} } },
39
30
  );
40
31
 
41
- // Create server instance
42
- export const server = newMcpServer();
43
-
44
32
  /**
45
33
  * Initializes the provided MCP Server with the given tools and handlers.
46
34
  * If not provided, the default client, tools and handlers will be used.
47
35
  */
48
- export function initMcpServer(params: {
36
+ export async function initMcpServer(params: {
49
37
  server: Server | McpServer;
50
38
  clientOptions?: ClientOptions;
51
39
  mcpOptions?: McpOptions;
40
+ stainlessApiKey?: string | undefined;
52
41
  }) {
53
42
  const server = params.server instanceof McpServer ? params.server.server : params.server;
54
- const mcpOptions = params.mcpOptions ?? {};
55
-
56
- let providedEndpoints: Endpoint[] | null = null;
57
- let endpointMap: Record<string, Endpoint> | null = null;
58
-
59
- const initTools = async (implementation?: Implementation) => {
60
- if (implementation && (!mcpOptions.client || mcpOptions.client === 'infer')) {
61
- mcpOptions.client =
62
- implementation.name.toLowerCase().includes('claude') ? 'claude'
63
- : implementation.name.toLowerCase().includes('cursor') ? 'cursor'
64
- : undefined;
65
- mcpOptions.capabilities = {
66
- ...(mcpOptions.client && knownClients[mcpOptions.client]),
67
- ...mcpOptions.capabilities,
68
- };
69
- }
70
- providedEndpoints ??= await selectTools(endpoints, mcpOptions);
71
- endpointMap ??= Object.fromEntries(providedEndpoints.map((endpoint) => [endpoint.tool.name, endpoint]));
72
- };
73
43
 
74
44
  const logAtLevel =
75
45
  (level: 'debug' | 'info' | 'warning' | 'error') =>
@@ -86,57 +56,100 @@ export function initMcpServer(params: {
86
56
  error: logAtLevel('error'),
87
57
  };
88
58
 
89
- let client = new CasParser({
90
- logger,
91
- ...params.clientOptions,
92
- defaultHeaders: {
93
- ...params.clientOptions?.defaultHeaders,
94
- 'X-Stainless-MCP': 'true',
95
- },
96
- });
59
+ let _client: CasParser | undefined;
60
+ let _clientError: Error | undefined;
61
+ let _logLevel: 'debug' | 'info' | 'warn' | 'error' | 'off' | undefined;
62
+
63
+ const getClient = (): CasParser => {
64
+ if (_clientError) throw _clientError;
65
+ if (!_client) {
66
+ try {
67
+ _client = new CasParser({
68
+ ...{ environment: (readEnv('CAS_PARSER_ENVIRONMENT') || undefined) as any },
69
+ logger,
70
+ ...params.clientOptions,
71
+ defaultHeaders: {
72
+ ...params.clientOptions?.defaultHeaders,
73
+ 'X-Stainless-MCP': 'true',
74
+ },
75
+ });
76
+ if (_logLevel) {
77
+ _client = _client.withOptions({ logLevel: _logLevel });
78
+ }
79
+ } catch (e) {
80
+ _clientError = e instanceof Error ? e : new Error(String(e));
81
+ throw _clientError;
82
+ }
83
+ }
84
+ return _client;
85
+ };
86
+
87
+ const providedTools = selectTools(params.mcpOptions);
88
+ const toolMap = Object.fromEntries(providedTools.map((mcpTool) => [mcpTool.tool.name, mcpTool]));
97
89
 
98
90
  server.setRequestHandler(ListToolsRequestSchema, async () => {
99
- if (providedEndpoints === null) {
100
- await initTools(server.getClientVersion());
101
- }
102
91
  return {
103
- tools: providedEndpoints!.map((endpoint) => endpoint.tool),
92
+ tools: providedTools.map((mcpTool) => mcpTool.tool),
104
93
  };
105
94
  });
106
95
 
107
96
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
108
- if (endpointMap === null) {
109
- await initTools(server.getClientVersion());
110
- }
111
97
  const { name, arguments: args } = request.params;
112
- const endpoint = endpointMap![name];
113
- if (!endpoint) {
98
+ const mcpTool = toolMap[name];
99
+ if (!mcpTool) {
114
100
  throw new Error(`Unknown tool: ${name}`);
115
101
  }
116
102
 
117
- return executeHandler(endpoint.tool, endpoint.handler, client, args, mcpOptions.capabilities);
103
+ let client: CasParser;
104
+ try {
105
+ client = getClient();
106
+ } catch (error) {
107
+ return {
108
+ content: [
109
+ {
110
+ type: 'text' as const,
111
+ text: `Failed to initialize client: ${error instanceof Error ? error.message : String(error)}`,
112
+ },
113
+ ],
114
+ isError: true,
115
+ };
116
+ }
117
+
118
+ return executeHandler({
119
+ handler: mcpTool.handler,
120
+ reqContext: {
121
+ client,
122
+ stainlessApiKey: params.stainlessApiKey ?? params.mcpOptions?.stainlessApiKey,
123
+ },
124
+ args,
125
+ });
118
126
  });
119
127
 
120
128
  server.setRequestHandler(SetLevelRequestSchema, async (request) => {
121
129
  const { level } = request.params;
130
+ let logLevel: 'debug' | 'info' | 'warn' | 'error' | 'off';
122
131
  switch (level) {
123
132
  case 'debug':
124
- client = client.withOptions({ logLevel: 'debug' });
133
+ logLevel = 'debug';
125
134
  break;
126
135
  case 'info':
127
- client = client.withOptions({ logLevel: 'info' });
136
+ logLevel = 'info';
128
137
  break;
129
138
  case 'notice':
130
139
  case 'warning':
131
- client = client.withOptions({ logLevel: 'warn' });
140
+ logLevel = 'warn';
132
141
  break;
133
142
  case 'error':
134
- client = client.withOptions({ logLevel: 'error' });
143
+ logLevel = 'error';
135
144
  break;
136
145
  default:
137
- client = client.withOptions({ logLevel: 'off' });
146
+ logLevel = 'off';
138
147
  break;
139
148
  }
149
+ _logLevel = logLevel;
150
+ if (_client) {
151
+ _client = _client.withOptions({ logLevel });
152
+ }
140
153
  return {};
141
154
  });
142
155
  }
@@ -144,61 +157,29 @@ export function initMcpServer(params: {
144
157
  /**
145
158
  * Selects the tools to include in the MCP Server based on the provided options.
146
159
  */
147
- export async function selectTools(endpoints: Endpoint[], options?: McpOptions): Promise<Endpoint[]> {
148
- const filteredEndpoints = query(options?.filters ?? [], endpoints);
149
-
150
- let includedTools = filteredEndpoints;
151
-
152
- if (includedTools.length > 0) {
153
- if (options?.includeDynamicTools) {
154
- includedTools = dynamicTools(includedTools);
155
- }
156
- } else {
157
- if (options?.includeAllTools) {
158
- includedTools = endpoints;
159
- } else if (options?.includeDynamicTools) {
160
- includedTools = dynamicTools(endpoints);
161
- } else if (options?.includeCodeTools) {
162
- includedTools = [await codeTool()];
163
- } else {
164
- includedTools = endpoints;
165
- }
160
+ export function selectTools(options?: McpOptions): McpTool[] {
161
+ const includedTools = [
162
+ codeTool({
163
+ blockedMethods: blockedMethodsForCodeTool(options),
164
+ }),
165
+ ];
166
+ if (options?.includeDocsTools ?? true) {
167
+ includedTools.push(docsSearchTool);
166
168
  }
167
-
168
- const capabilities = { ...defaultClientCapabilities, ...options?.capabilities };
169
- return applyCompatibilityTransformations(includedTools, capabilities);
169
+ return includedTools;
170
170
  }
171
171
 
172
172
  /**
173
173
  * Runs the provided handler with the given client and arguments.
174
174
  */
175
- export async function executeHandler(
176
- tool: Tool,
177
- handler: HandlerFunction,
178
- client: CasParser,
179
- args: Record<string, unknown> | undefined,
180
- compatibilityOptions?: Partial<ClientCapabilities>,
181
- ) {
182
- const options = { ...defaultClientCapabilities, ...compatibilityOptions };
183
- if (!options.validJson && args) {
184
- args = parseEmbeddedJSON(args, tool.inputSchema);
185
- }
186
- return await handler(client, args || {});
175
+ export async function executeHandler({
176
+ handler,
177
+ reqContext,
178
+ args,
179
+ }: {
180
+ handler: HandlerFunction;
181
+ reqContext: McpRequestContext;
182
+ args: Record<string, unknown> | undefined;
183
+ }): Promise<ToolCallResult> {
184
+ return await handler({ reqContext, args: args || {} });
187
185
  }
188
-
189
- export const readEnv = (env: string): string | undefined => {
190
- if (typeof (globalThis as any).process !== 'undefined') {
191
- return (globalThis as any).process.env?.[env]?.trim();
192
- } else if (typeof (globalThis as any).Deno !== 'undefined') {
193
- return (globalThis as any).Deno.env?.get?.(env)?.trim();
194
- }
195
- return;
196
- };
197
-
198
- export const readEnvOrError = (env: string): string => {
199
- let envValue = readEnv(env);
200
- if (envValue === undefined) {
201
- throw new Error(`Environment variable ${env} is not set`);
202
- }
203
- return envValue;
204
- };
package/src/stdio.ts CHANGED
@@ -1,11 +1,11 @@
1
1
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
2
- import { initMcpServer, newMcpServer } from './server';
3
2
  import { McpOptions } from './options';
3
+ import { initMcpServer, newMcpServer } from './server';
4
4
 
5
- export const launchStdioServer = async (options: McpOptions) => {
6
- const server = newMcpServer();
5
+ export const launchStdioServer = async (mcpOptions: McpOptions) => {
6
+ const server = await newMcpServer(mcpOptions.stainlessApiKey);
7
7
 
8
- initMcpServer({ server, mcpOptions: options });
8
+ await initMcpServer({ server, mcpOptions, stainlessApiKey: mcpOptions.stainlessApiKey });
9
9
 
10
10
  const transport = new StdioServerTransport();
11
11
  await server.connect(transport);
@@ -42,10 +42,18 @@ export type ToolCallResult = {
42
42
  isError?: boolean;
43
43
  };
44
44
 
45
- export type HandlerFunction = (
46
- client: CasParser,
47
- args: Record<string, unknown> | undefined,
48
- ) => Promise<ToolCallResult>;
45
+ export type McpRequestContext = {
46
+ client: CasParser;
47
+ stainlessApiKey?: string | undefined;
48
+ };
49
+
50
+ export type HandlerFunction = ({
51
+ reqContext,
52
+ args,
53
+ }: {
54
+ reqContext: McpRequestContext;
55
+ args: Record<string, unknown> | undefined;
56
+ }) => Promise<ToolCallResult>;
49
57
 
50
58
  export function asTextContentResult(result: unknown): ToolCallResult {
51
59
  return {
@@ -87,6 +95,18 @@ export async function asBinaryContentResult(response: Response): Promise<ToolCal
87
95
  }
88
96
  }
89
97
 
98
+ export function asErrorResult(message: string): ToolCallResult {
99
+ return {
100
+ content: [
101
+ {
102
+ type: 'text',
103
+ text: message,
104
+ },
105
+ ],
106
+ isError: true,
107
+ };
108
+ }
109
+
90
110
  export type Metadata = {
91
111
  resource: string;
92
112
  operation: 'read' | 'write';
@@ -96,7 +116,7 @@ export type Metadata = {
96
116
  operationId?: string;
97
117
  };
98
118
 
99
- export type Endpoint = {
119
+ export type McpTool = {
100
120
  metadata: Metadata;
101
121
  tool: Tool;
102
122
  handler: HandlerFunction;
package/src/util.ts ADDED
@@ -0,0 +1,25 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ export const readEnv = (env: string): string | undefined => {
4
+ if (typeof (globalThis as any).process !== 'undefined') {
5
+ return (globalThis as any).process.env?.[env]?.trim();
6
+ } else if (typeof (globalThis as any).Deno !== 'undefined') {
7
+ return (globalThis as any).Deno.env?.get?.(env)?.trim();
8
+ }
9
+ return;
10
+ };
11
+
12
+ export const readEnvOrError = (env: string): string => {
13
+ let envValue = readEnv(env);
14
+ if (envValue === undefined) {
15
+ throw new Error(`Environment variable ${env} is not set`);
16
+ }
17
+ return envValue;
18
+ };
19
+
20
+ export const requireValue = <T>(value: T | undefined, description: string): T => {
21
+ if (value === undefined) {
22
+ throw new Error(`Missing required value: ${description}`);
23
+ }
24
+ return value;
25
+ };
package/stdio.d.mts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { McpOptions } from "./options.mjs";
2
- export declare const launchStdioServer: (options: McpOptions) => Promise<void>;
2
+ export declare const launchStdioServer: (mcpOptions: McpOptions) => Promise<void>;
3
3
  //# sourceMappingURL=stdio.d.mts.map
package/stdio.d.mts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.mts","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":"OAEO,EAAE,UAAU,EAAE;AAErB,eAAO,MAAM,iBAAiB,GAAU,SAAS,UAAU,kBAQ1D,CAAC"}
1
+ {"version":3,"file":"stdio.d.mts","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":"OACO,EAAE,UAAU,EAAE;AAGrB,eAAO,MAAM,iBAAiB,GAAU,YAAY,UAAU,kBAQ7D,CAAC"}
package/stdio.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  import { McpOptions } from "./options.js";
2
- export declare const launchStdioServer: (options: McpOptions) => Promise<void>;
2
+ export declare const launchStdioServer: (mcpOptions: McpOptions) => Promise<void>;
3
3
  //# sourceMappingURL=stdio.d.ts.map
package/stdio.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":"OAEO,EAAE,UAAU,EAAE;AAErB,eAAO,MAAM,iBAAiB,GAAU,SAAS,UAAU,kBAQ1D,CAAC"}
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":"OACO,EAAE,UAAU,EAAE;AAGrB,eAAO,MAAM,iBAAiB,GAAU,YAAY,UAAU,kBAQ7D,CAAC"}
package/stdio.js CHANGED
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.launchStdioServer = void 0;
4
4
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
5
5
  const server_1 = require("./server.js");
6
- const launchStdioServer = async (options) => {
7
- const server = (0, server_1.newMcpServer)();
8
- (0, server_1.initMcpServer)({ server, mcpOptions: options });
6
+ const launchStdioServer = async (mcpOptions) => {
7
+ const server = await (0, server_1.newMcpServer)(mcpOptions.stainlessApiKey);
8
+ await (0, server_1.initMcpServer)({ server, mcpOptions, stainlessApiKey: mcpOptions.stainlessApiKey });
9
9
  const transport = new stdio_js_1.StdioServerTransport();
10
10
  await server.connect(transport);
11
11
  console.error('MCP Server running on stdio');
package/stdio.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.js","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":";;;AAAA,wEAAiF;AACjF,wCAAuD;AAGhD,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAmB,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,IAAA,qBAAY,GAAE,CAAC;IAE9B,IAAA,sBAAa,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAC/C,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B"}
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":";;;AAAA,wEAAiF;AAEjF,wCAAuD;AAEhD,MAAM,iBAAiB,GAAG,KAAK,EAAE,UAAsB,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAY,EAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAE9D,MAAM,IAAA,sBAAa,EAAC,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IAEzF,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAC/C,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B"}
package/stdio.mjs CHANGED
@@ -1,8 +1,8 @@
1
1
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
2
2
  import { initMcpServer, newMcpServer } from "./server.mjs";
3
- export const launchStdioServer = async (options) => {
4
- const server = newMcpServer();
5
- initMcpServer({ server, mcpOptions: options });
3
+ export const launchStdioServer = async (mcpOptions) => {
4
+ const server = await newMcpServer(mcpOptions.stainlessApiKey);
5
+ await initMcpServer({ server, mcpOptions, stainlessApiKey: mcpOptions.stainlessApiKey });
6
6
  const transport = new StdioServerTransport();
7
7
  await server.connect(transport);
8
8
  console.error('MCP Server running on stdio');
package/stdio.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.mjs","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":"OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C;OACzE,EAAE,aAAa,EAAE,YAAY,EAAE;AAGtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAmB,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,CAAC,CAAC;IAE/C,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAC/C,CAAC,CAAC"}
1
+ {"version":3,"file":"stdio.mjs","sourceRoot":"","sources":["src/stdio.ts"],"names":[],"mappings":"OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C;OAEzE,EAAE,aAAa,EAAE,YAAY,EAAE;AAEtC,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,UAAsB,EAAE,EAAE;IAChE,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;IAE9D,MAAM,aAAa,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC;IAEzF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;AAC/C,CAAC,CAAC"}
@@ -31,9 +31,17 @@ export type ToolCallResult = {
31
31
  content: ContentBlock[];
32
32
  isError?: boolean;
33
33
  };
34
- export type HandlerFunction = (client: CasParser, args: Record<string, unknown> | undefined) => Promise<ToolCallResult>;
34
+ export type McpRequestContext = {
35
+ client: CasParser;
36
+ stainlessApiKey?: string | undefined;
37
+ };
38
+ export type HandlerFunction = ({ reqContext, args, }: {
39
+ reqContext: McpRequestContext;
40
+ args: Record<string, unknown> | undefined;
41
+ }) => Promise<ToolCallResult>;
35
42
  export declare function asTextContentResult(result: unknown): ToolCallResult;
36
43
  export declare function asBinaryContentResult(response: Response): Promise<ToolCallResult>;
44
+ export declare function asErrorResult(message: string): ToolCallResult;
37
45
  export type Metadata = {
38
46
  resource: string;
39
47
  operation: 'read' | 'write';
@@ -42,7 +50,7 @@ export type Metadata = {
42
50
  httpPath?: string;
43
51
  operationId?: string;
44
52
  };
45
- export type Endpoint = {
53
+ export type McpTool = {
46
54
  metadata: Metadata;
47
55
  tool: Tool;
48
56
  handler: HandlerFunction;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"OAEO,SAAS,MAAM,iBAAiB;OAChC,EAAE,IAAI,EAAE,MAAM,oCAAoC;AAEzD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EACJ;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,GACD;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACP,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;AAE3G,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,EAC7B,UAAU,EACV,IAAI,GACL,EAAE;IACD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC3C,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9B,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CASnE;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CA2BvF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAU7D;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC"}
@@ -31,9 +31,17 @@ export type ToolCallResult = {
31
31
  content: ContentBlock[];
32
32
  isError?: boolean;
33
33
  };
34
- export type HandlerFunction = (client: CasParser, args: Record<string, unknown> | undefined) => Promise<ToolCallResult>;
34
+ export type McpRequestContext = {
35
+ client: CasParser;
36
+ stainlessApiKey?: string | undefined;
37
+ };
38
+ export type HandlerFunction = ({ reqContext, args, }: {
39
+ reqContext: McpRequestContext;
40
+ args: Record<string, unknown> | undefined;
41
+ }) => Promise<ToolCallResult>;
35
42
  export declare function asTextContentResult(result: unknown): ToolCallResult;
36
43
  export declare function asBinaryContentResult(response: Response): Promise<ToolCallResult>;
44
+ export declare function asErrorResult(message: string): ToolCallResult;
37
45
  export type Metadata = {
38
46
  resource: string;
39
47
  operation: 'read' | 'write';
@@ -42,7 +50,7 @@ export type Metadata = {
42
50
  httpPath?: string;
43
51
  operationId?: string;
44
52
  };
45
- export type Endpoint = {
53
+ export type McpTool = {
46
54
  metadata: Metadata;
47
55
  tool: Tool;
48
56
  handler: HandlerFunction;
package/types.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"OAEO,SAAS,MAAM,iBAAiB;OAChC,EAAE,IAAI,EAAE,MAAM,oCAAoC;AAEzD,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,UAAU,CAAC;IACjB,QAAQ,EACJ;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,GACD;QACE,GAAG,EAAE,MAAM,CAAC;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACP,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,oBAAoB,CAAC;AAE3G,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,EAC7B,UAAU,EACV,IAAI,GACL,EAAE;IACD,UAAU,EAAE,iBAAiB,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;CAC3C,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE9B,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,CASnE;AAED,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,CAAC,CA2BvF;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAU7D;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,EAAE,eAAe,CAAC;CAC1B,CAAC"}
@@ -3,6 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
4
  exports.asTextContentResult = asTextContentResult;
5
5
  exports.asBinaryContentResult = asBinaryContentResult;
6
+ exports.asErrorResult = asErrorResult;
6
7
  function asTextContentResult(result) {
7
8
  return {
8
9
  content: [
@@ -43,4 +44,15 @@ async function asBinaryContentResult(response) {
43
44
  };
44
45
  }
45
46
  }
47
+ function asErrorResult(message) {
48
+ return {
49
+ content: [
50
+ {
51
+ type: 'text',
52
+ text: message,
53
+ },
54
+ ],
55
+ isError: true,
56
+ };
57
+ }
46
58
  //# sourceMappingURL=types.js.map
package/types.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":";AAAA,sFAAsF;;AAyDtF,kDASC;AAED,sDA2BC;AAED,sCAUC;AAlDD,SAAgB,mBAAmB,CAAC,MAAe;IACjD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,qBAAqB,CAAC,QAAkB;IAC5D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC7C,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC7C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE;wBACR,uEAAuE;wBACvE,GAAG,EAAE,0BAA0B;wBAC/B,QAAQ;wBACR,IAAI,EAAE,IAAI;qBACX;iBACF;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAAC,OAAe;IAC3C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
@@ -39,4 +39,15 @@ export async function asBinaryContentResult(response) {
39
39
  };
40
40
  }
41
41
  }
42
+ export function asErrorResult(message) {
43
+ return {
44
+ content: [
45
+ {
46
+ type: 'text',
47
+ text: message,
48
+ },
49
+ ],
50
+ isError: true,
51
+ };
52
+ }
42
53
  //# sourceMappingURL=types.mjs.map
package/types.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.mjs","sourceRoot":"","sources":["src/types.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAyDtF,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,QAAkB;IAC5D,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IAC3B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAClC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC7C,CAAC;IACJ,CAAC;SAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzC,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC7C,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,OAAO;YACL,OAAO,EAAE;gBACP;oBACE,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE;wBACR,uEAAuE;wBACvE,GAAG,EAAE,0BAA0B;wBAC/B,QAAQ;wBACR,IAAI,EAAE,IAAI;qBACX;iBACF;aACF;SACF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,OAAO;aACd;SACF;QACD,OAAO,EAAE,IAAI;KACd,CAAC;AACJ,CAAC"}
package/util.d.mts ADDED
@@ -0,0 +1,4 @@
1
+ export declare const readEnv: (env: string) => string | undefined;
2
+ export declare const readEnvOrError: (env: string) => string;
3
+ export declare const requireValue: <T>(value: T | undefined, description: string) => T;
4
+ //# sourceMappingURL=util.d.mts.map
package/util.d.mts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.mts","sourceRoot":"","sources":["src/util.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAO9C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAM5C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,aAAa,MAAM,KAAG,CAK3E,CAAC"}
package/util.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare const readEnv: (env: string) => string | undefined;
2
+ export declare const readEnvOrError: (env: string) => string;
3
+ export declare const requireValue: <T>(value: T | undefined, description: string) => T;
4
+ //# sourceMappingURL=util.d.ts.map
package/util.d.ts.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["src/util.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAO9C,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,KAAG,MAM5C,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,aAAa,MAAM,KAAG,CAK3E,CAAC"}
package/util.js ADDED
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.requireValue = exports.readEnvOrError = exports.readEnv = void 0;
5
+ const readEnv = (env) => {
6
+ if (typeof globalThis.process !== 'undefined') {
7
+ return globalThis.process.env?.[env]?.trim();
8
+ }
9
+ else if (typeof globalThis.Deno !== 'undefined') {
10
+ return globalThis.Deno.env?.get?.(env)?.trim();
11
+ }
12
+ return;
13
+ };
14
+ exports.readEnv = readEnv;
15
+ const readEnvOrError = (env) => {
16
+ let envValue = (0, exports.readEnv)(env);
17
+ if (envValue === undefined) {
18
+ throw new Error(`Environment variable ${env} is not set`);
19
+ }
20
+ return envValue;
21
+ };
22
+ exports.readEnvOrError = readEnvOrError;
23
+ const requireValue = (value, description) => {
24
+ if (value === undefined) {
25
+ throw new Error(`Missing required value: ${description}`);
26
+ }
27
+ return value;
28
+ };
29
+ exports.requireValue = requireValue;
30
+ //# sourceMappingURL=util.js.map
package/util.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["src/util.ts"],"names":[],"mappings":";AAAA,sFAAsF;;;AAE/E,MAAM,OAAO,GAAG,CAAC,GAAW,EAAsB,EAAE;IACzD,IAAI,OAAQ,UAAkB,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACvD,OAAQ,UAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;SAAM,IAAI,OAAQ,UAAkB,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3D,OAAQ,UAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO;AACT,CAAC,CAAC;AAPW,QAAA,OAAO,WAOlB;AAEK,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IACpD,IAAI,QAAQ,GAAG,IAAA,eAAO,EAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AANW,QAAA,cAAc,kBAMzB;AAEK,MAAM,YAAY,GAAG,CAAI,KAAoB,EAAE,WAAmB,EAAK,EAAE;IAC9E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB"}
package/util.mjs ADDED
@@ -0,0 +1,24 @@
1
+ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+ export const readEnv = (env) => {
3
+ if (typeof globalThis.process !== 'undefined') {
4
+ return globalThis.process.env?.[env]?.trim();
5
+ }
6
+ else if (typeof globalThis.Deno !== 'undefined') {
7
+ return globalThis.Deno.env?.get?.(env)?.trim();
8
+ }
9
+ return;
10
+ };
11
+ export const readEnvOrError = (env) => {
12
+ let envValue = readEnv(env);
13
+ if (envValue === undefined) {
14
+ throw new Error(`Environment variable ${env} is not set`);
15
+ }
16
+ return envValue;
17
+ };
18
+ export const requireValue = (value, description) => {
19
+ if (value === undefined) {
20
+ throw new Error(`Missing required value: ${description}`);
21
+ }
22
+ return value;
23
+ };
24
+ //# sourceMappingURL=util.mjs.map
package/util.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.mjs","sourceRoot":"","sources":["src/util.ts"],"names":[],"mappings":"AAAA,sFAAsF;AAEtF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAW,EAAsB,EAAE;IACzD,IAAI,OAAQ,UAAkB,CAAC,OAAO,KAAK,WAAW,EAAE,CAAC;QACvD,OAAQ,UAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IACxD,CAAC;SAAM,IAAI,OAAQ,UAAkB,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;QAC3D,OAAQ,UAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IACD,OAAO;AACT,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAU,EAAE;IACpD,IAAI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5B,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,aAAa,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAI,KAAoB,EAAE,WAAmB,EAAK,EAAE;IAC9E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,2BAA2B,WAAW,EAAE,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC"}