@corsair-dev/mcp 0.1.2 → 0.1.4

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.
@@ -1,5 +1,5 @@
1
1
  import type { SdkMcpToolDefinition } from '@anthropic-ai/claude-agent-sdk';
2
- import { z } from 'zod';
2
+ import type { z } from 'zod';
3
3
  import type { BaseMcpOptions } from '../core/adapters.js';
4
4
  export declare class ClaudeProvider {
5
5
  readonly name = "claude";
@@ -1 +1 @@
1
- {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,qBAAa,cAAc;IAC1B,QAAQ,CAAC,IAAI,YAAY;IAEnB,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;CAMpF"}
1
+ {"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/adapters/claude.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,qBAAa,cAAc;IAC1B,QAAQ,CAAC,IAAI,YAAY;IAEnB,KAAK,CACV,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;CAMjD"}
@@ -1 +1 @@
1
- {"version":3,"file":"mastra.d.ts","sourceRoot":"","sources":["../../src/adapters/mastra.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,qBAAa,cAAc;IAC1B,QAAQ,CAAC,IAAI,YAAY;IAEnB,KAAK,CAAC,OAAO,EAAE,cAAc;;;CAuBnC"}
1
+ {"version":3,"file":"mastra.d.ts","sourceRoot":"","sources":["../../src/adapters/mastra.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,qBAAa,cAAc;IAC1B,QAAQ,CAAC,IAAI,YAAY;IAEnB,KAAK,CAAC,OAAO,EAAE,cAAc;;;CAyBnC"}
@@ -15,6 +15,7 @@ export type BaseMcpOptions = {
15
15
  type?: 'api' | 'webhooks' | 'db';
16
16
  }) => unknown;
17
17
  get_schema: (path: string) => unknown;
18
+ setup: () => Promise<void>;
18
19
  [key: string]: unknown;
19
20
  };
20
21
  permissions?: PermissionAdapter;
@@ -1 +1 @@
1
- {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/core/adapters.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC/B,uBAAuB,CAAC,MAAM,EAAE;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,WAAW,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE;QACR,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;SACjC,KAAK,OAAO,CAAC;QACd,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QACtC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC"}
1
+ {"version":3,"file":"adapters.d.ts","sourceRoot":"","sources":["../../src/core/adapters.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG;IAC/B,uBAAuB,CAAC,MAAM,EAAE;QAC/B,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,WAAW,EAAE,MAAM,CAAC;KACpB,GAAG,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC3D,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE;QACR,eAAe,EAAE,CAAC,IAAI,CAAC,EAAE;YACxB,MAAM,CAAC,EAAE,MAAM,CAAC;YAChB,IAAI,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,IAAI,CAAC;SACjC,KAAK,OAAO,CAAC;QACd,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;QACtC,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACvB,CAAC;IACF,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC3B,CAAC"}
@@ -1,5 +1,5 @@
1
- import { type CorsairToolDef } from './tools.js';
2
1
  import type { BaseMcpOptions } from './adapters.js';
2
+ import type { CorsairToolDef } from './tools.js';
3
3
  export declare abstract class BaseProvider<TOutput> {
4
4
  abstract readonly name: string;
5
5
  abstract wrapTool(def: CorsairToolDef): TOutput;
@@ -1 +1 @@
1
- {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/core/provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACvE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,8BAAsB,YAAY,CAAC,OAAO;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO;IAE/C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,EAAE;CAGzC"}
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/core/provider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,8BAAsB,YAAY,CAAC,OAAO;IACzC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO;IAE/C,KAAK,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,EAAE;CAGzC"}
@@ -1,3 +1,3 @@
1
- import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- export declare function runStdioMcpServer(server: McpServer): Promise<void>;
1
+ import type { BaseMcpOptions } from './adapters.js';
2
+ export declare function runStdioMcpServer(options: BaseMcpOptions): Promise<void>;
3
3
  //# sourceMappingURL=stdio.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/core/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGzE,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAGxE"}
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/core/stdio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,cAAc,GACrB,OAAO,CAAC,IAAI,CAAC,CAIf"}
@@ -1 +1 @@
1
- {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/core/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAGpD,MAAM,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC;IACrB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACpE,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,EAAE,CAyK9E"}
1
+ {"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/core/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,cAAc,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,CAAC,CAAC,WAAW,CAAC;IACrB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CACpE,CAAC;AAEF,wBAAgB,oBAAoB,CACnC,OAAO,EAAE,cAAc,GACrB,cAAc,EAAE,CA+LlB"}
package/dist/index.d.ts CHANGED
@@ -1,13 +1,13 @@
1
- export { createBaseMcpServer } from './core/base.js';
2
- export { createMcpRouter } from './core/http.js';
3
- export { runStdioMcpServer } from './core/stdio.js';
1
+ export { ClaudeProvider } from './adapters/claude.js';
2
+ export { MastraProvider } from './adapters/mastra.js';
4
3
  export type { OpenAIMcpConfig } from './adapters/openai.js';
5
4
  export { getOpenAIMcpConfig } from './adapters/openai.js';
6
5
  export type { VercelAiMcpClientOptions } from './adapters/vercel-ai.js';
7
6
  export { createVercelAiMcpClient } from './adapters/vercel-ai.js';
7
+ export type { BaseMcpOptions, PermissionAdapter } from './core/adapters.js';
8
+ export { createBaseMcpServer } from './core/base.js';
9
+ export { createMcpRouter } from './core/http.js';
8
10
  export { BaseProvider } from './core/provider.js';
9
- export { ClaudeProvider } from './adapters/claude.js';
10
- export { MastraProvider } from './adapters/mastra.js';
11
+ export { runStdioMcpServer } from './core/stdio.js';
11
12
  export type { CorsairToolDef } from './core/tools.js';
12
- export type { BaseMcpOptions, PermissionAdapter } from './core/adapters.js';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,YAAY,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC"}
package/dist/index.js CHANGED
@@ -1,7 +1,3 @@
1
- // src/core/base.ts
2
- import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
3
- import { z as z2 } from "zod";
4
-
5
1
  // src/core/tools.ts
6
2
  import { z } from "zod";
7
3
  function buildCorsairToolDefs(options) {
@@ -79,7 +75,9 @@ function buildCorsairToolDefs(options) {
79
75
  };
80
76
  }
81
77
  try {
82
- const result = await fn(args);
78
+ const result = await fn(
79
+ args
80
+ );
83
81
  return {
84
82
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
85
83
  };
@@ -100,6 +98,25 @@ ${full}`
100
98
  };
101
99
  }
102
100
  }
101
+ },
102
+ {
103
+ name: "corsair_setup",
104
+ description: "Set up the Corsair instance \u2014 creates plugin rows, issues encryption keys, and checks auth status for every configured plugin. Call this before using any other Corsair tools if setup has not been run yet.",
105
+ shape: {},
106
+ handler: async () => {
107
+ try {
108
+ await corsair.setup();
109
+ return {
110
+ content: [{ type: "text", text: "Corsair setup complete." }]
111
+ };
112
+ } catch (err) {
113
+ const message = err instanceof Error ? err.message : String(err);
114
+ return {
115
+ isError: true,
116
+ content: [{ type: "text", text: `Setup failed: ${message}` }]
117
+ };
118
+ }
119
+ }
103
120
  }
104
121
  ];
105
122
  if (permissions && basePermissionUrl) {
@@ -140,7 +157,74 @@ ${full}`
140
157
  return defs;
141
158
  }
142
159
 
160
+ // src/adapters/claude.ts
161
+ var ClaudeProvider = class {
162
+ name = "claude";
163
+ async build(options) {
164
+ const { tool } = await import("@anthropic-ai/claude-agent-sdk");
165
+ return buildCorsairToolDefs(options).map(
166
+ (def) => tool(def.name, def.description, def.shape, def.handler)
167
+ );
168
+ }
169
+ };
170
+
171
+ // src/adapters/mastra.ts
172
+ import { z as z2 } from "zod";
173
+ var MastraProvider = class {
174
+ name = "mastra";
175
+ async build(options) {
176
+ const { createTool } = await import("@mastra/core/tools");
177
+ return buildCorsairToolDefs(options).map(
178
+ (def) => createTool({
179
+ id: def.name,
180
+ description: def.description,
181
+ inputSchema: z2.object(def.shape),
182
+ execute: async (inputData) => {
183
+ const result = await def.handler(
184
+ inputData
185
+ );
186
+ const textItems = result.content.filter((c) => c.type === "text");
187
+ if (result.isError) {
188
+ throw new Error(textItems.map((c) => c.text).join("\n"));
189
+ }
190
+ const text = textItems[0]?.text ?? "";
191
+ try {
192
+ return JSON.parse(text);
193
+ } catch {
194
+ return text;
195
+ }
196
+ }
197
+ })
198
+ );
199
+ }
200
+ };
201
+
202
+ // src/adapters/openai.ts
203
+ function getOpenAIMcpConfig(baseUrl, headers) {
204
+ return {
205
+ serverLabel: "corsair",
206
+ serverUrl: baseUrl,
207
+ headers
208
+ };
209
+ }
210
+
211
+ // src/adapters/vercel-ai.ts
212
+ async function createVercelAiMcpClient(options) {
213
+ const { createMCPClient } = await import("@ai-sdk/mcp");
214
+ const { url, headers } = options;
215
+ const client = await createMCPClient({
216
+ transport: {
217
+ type: "http",
218
+ url,
219
+ headers
220
+ }
221
+ });
222
+ return client;
223
+ }
224
+
143
225
  // src/core/base.ts
226
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
227
+ import { z as z3 } from "zod";
144
228
  function createBaseMcpServer(options) {
145
229
  const server = new McpServer({
146
230
  name: "corsair",
@@ -150,7 +234,7 @@ function createBaseMcpServer(options) {
150
234
  for (const def of buildCorsairToolDefs(options)) {
151
235
  server.registerTool(
152
236
  def.name,
153
- { description: def.description, inputSchema: z2.object(def.shape) },
237
+ { description: def.description, inputSchema: z3.object(def.shape) },
154
238
  def.handler
155
239
  );
156
240
  }
@@ -216,36 +300,6 @@ function createMcpRouter(createServer) {
216
300
  return router;
217
301
  }
218
302
 
219
- // src/core/stdio.ts
220
- import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
221
- async function runStdioMcpServer(server) {
222
- const transport = new StdioServerTransport();
223
- await server.connect(transport);
224
- }
225
-
226
- // src/adapters/openai.ts
227
- function getOpenAIMcpConfig(baseUrl, headers) {
228
- return {
229
- serverLabel: "corsair",
230
- serverUrl: baseUrl,
231
- headers
232
- };
233
- }
234
-
235
- // src/adapters/vercel-ai.ts
236
- async function createVercelAiMcpClient(options) {
237
- const { createMCPClient } = await import("@ai-sdk/mcp");
238
- const { url, headers } = options;
239
- const client = await createMCPClient({
240
- transport: {
241
- type: "http",
242
- url,
243
- headers
244
- }
245
- });
246
- return client;
247
- }
248
-
249
303
  // src/core/provider.ts
250
304
  var BaseProvider = class {
251
305
  build(options) {
@@ -253,46 +307,13 @@ var BaseProvider = class {
253
307
  }
254
308
  };
255
309
 
256
- // src/adapters/claude.ts
257
- import "zod";
258
- var ClaudeProvider = class {
259
- name = "claude";
260
- async build(options) {
261
- const { tool } = await import("@anthropic-ai/claude-agent-sdk");
262
- return buildCorsairToolDefs(options).map(
263
- (def) => tool(def.name, def.description, def.shape, def.handler)
264
- );
265
- }
266
- };
267
-
268
- // src/adapters/mastra.ts
269
- import { z as z4 } from "zod";
270
- var MastraProvider = class {
271
- name = "mastra";
272
- async build(options) {
273
- const { createTool } = await import("@mastra/core/tools");
274
- return buildCorsairToolDefs(options).map(
275
- (def) => createTool({
276
- id: def.name,
277
- description: def.description,
278
- inputSchema: z4.object(def.shape),
279
- execute: async (inputData) => {
280
- const result = await def.handler(inputData);
281
- const textItems = result.content.filter((c) => c.type === "text");
282
- if (result.isError) {
283
- throw new Error(textItems.map((c) => c.text).join("\n"));
284
- }
285
- const text = textItems[0]?.text ?? "";
286
- try {
287
- return JSON.parse(text);
288
- } catch {
289
- return text;
290
- }
291
- }
292
- })
293
- );
294
- }
295
- };
310
+ // src/core/stdio.ts
311
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
312
+ async function runStdioMcpServer(options) {
313
+ const server = createBaseMcpServer(options);
314
+ const transport = new StdioServerTransport();
315
+ await server.connect(transport);
316
+ }
296
317
  export {
297
318
  BaseProvider,
298
319
  ClaudeProvider,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@corsair-dev/mcp",
3
- "version": "0.1.2",
4
- "description": "Base MCP server and SDK extensions for Corsair (workflows, cron, permissions)",
3
+ "version": "0.1.4",
4
+ "description": "MCP server and SDK adapters for Corsair — list operations, inspect schemas, run API calls",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
7
7
  "module": "./dist/index.js",
@@ -20,7 +20,7 @@
20
20
  "@modelcontextprotocol/sdk": "^1.27.1",
21
21
  "express": "^4.21.0",
22
22
  "zod": "^3.25.0",
23
- "corsair": "0.1.28"
23
+ "corsair": "0.1.30"
24
24
  },
25
25
  "peerDependencies": {
26
26
  "@ai-sdk/mcp": ">=0.0.1",