From ab81ad14e16ea9596be6f7fcfdf80f545d519c2b Mon Sep 17 00:00:00 2001
From: Moritz Schneider <9135566+bazumo@users.noreply.github.com>
Date: Wed, 19 Mar 2025 11:49:39 -0700
Subject: [PATCH] Implement Model Context Protocol server poc (#552)
----
> [!IMPORTANT]
> Introduces a new Model Context Protocol server with OpenAPI
integration, updates build configurations, and adds necessary files for
initial release.
>
> - **New MCP Server**:
> - Implements MCP server in `src/index.ts` using
`@modelcontextprotocol/sdk`.
> - Handles tool requests with `ListToolsRequestSchema` and
`CallToolRequestSchema`.
> - Supports 40 endpoints, defined in `operationIDs`.
> - **OpenAPI Integration**:
> - Generates OpenAPI schema in `generate-openapi.ts` and writes to
`mcp-server/openapi`.
> - Converts OpenAPI parameters to JSON schema in
`openapi-to-jsonschema.ts`.
> - **Configuration and Build**:
> - Adds `package.json` for MCP server with dependencies and scripts.
> - Configures ESLint in `.eslintrc.cjs`.
> - Updates `Dockerfile` and `turbo.json` to include MCP server in build
process.
> - **Miscellaneous**:
> - Adds `.gitignore` for OpenAPI JSON files.
> - Initial release noted in `CHANGELOG.md`.
>
> This description was created by [
](https://www.ellipsis.dev?ref=stack-auth%2Fstack-auth&utm_source=github&utm_medium=referral)
for d0970c40592b9d871be29d72ce267ff7ae67cb2c. It will automatically
update as commits are pushed.
---------
Co-authored-by: Konsti Wohlwend
---
apps/backend/scripts/generate-openapi.ts | 7 +-
apps/mcp-server/.eslintrc.cjs | 7 +
apps/mcp-server/CHANGELOG.md | 5 +
apps/mcp-server/openapi/.gitignore | 1 +
apps/mcp-server/package.json | 29 ++
apps/mcp-server/src/index.ts | 227 +++++++++
.../src/utils/openapi-to-jsonschema.ts | 155 ++++++
apps/mcp-server/tsconfig.json | 37 ++
docker/server/Dockerfile | 2 +-
pnpm-lock.yaml | 441 ++++++++++++++++--
turbo.json | 5 +
11 files changed, 885 insertions(+), 31 deletions(-)
create mode 100644 apps/mcp-server/.eslintrc.cjs
create mode 100644 apps/mcp-server/CHANGELOG.md
create mode 100644 apps/mcp-server/openapi/.gitignore
create mode 100644 apps/mcp-server/package.json
create mode 100644 apps/mcp-server/src/index.ts
create mode 100644 apps/mcp-server/src/utils/openapi-to-jsonschema.ts
create mode 100644 apps/mcp-server/tsconfig.json
diff --git a/apps/backend/scripts/generate-openapi.ts b/apps/backend/scripts/generate-openapi.ts
index d56722a51..d8cd25992 100644
--- a/apps/backend/scripts/generate-openapi.ts
+++ b/apps/backend/scripts/generate-openapi.ts
@@ -15,7 +15,8 @@ async function main() {
const filePathPrefix = path.resolve(process.platform === "win32" ? "apps/src/app/api/latest" : "src/app/api/latest");
const importPathPrefix = "@/app/api/latest";
const filePaths = [...await glob(filePathPrefix + "/**/route.{js,jsx,ts,tsx}")];
- const openAPISchema = yaml.stringify(parseOpenAPI({
+
+ const openApiSchemaObject = parseOpenAPI({
endpoints: new Map(await Promise.all(filePaths.map(async (filePath) => {
if (!filePath.startsWith(filePathPrefix)) {
throw new Error(`Invalid file path: ${filePath}`);
@@ -32,7 +33,9 @@ async function main() {
return [urlPath, handlersByMethod] as const;
}))),
audience,
- }));
+ });
+ const openAPISchema = yaml.stringify(openApiSchemaObject);
+ writeFileSyncIfChanged(`../mcp-server/openapi/${audience}.json`, JSON.stringify(openApiSchemaObject, null, 2));
writeFileSyncIfChanged(`../../docs/fern/openapi/${audience}.yaml`, openAPISchema);
const webhookOpenAPISchema = yaml.stringify(parseWebhookOpenAPI({
diff --git a/apps/mcp-server/.eslintrc.cjs b/apps/mcp-server/.eslintrc.cjs
new file mode 100644
index 000000000..28b80fbd2
--- /dev/null
+++ b/apps/mcp-server/.eslintrc.cjs
@@ -0,0 +1,7 @@
+module.exports = {
+ "extends": [
+ "../../eslint-configs/defaults.js",
+ "../../eslint-configs/next.js",
+ ],
+ "ignorePatterns": ['/*', '!/src']
+};
diff --git a/apps/mcp-server/CHANGELOG.md b/apps/mcp-server/CHANGELOG.md
new file mode 100644
index 000000000..de32365c4
--- /dev/null
+++ b/apps/mcp-server/CHANGELOG.md
@@ -0,0 +1,5 @@
+# @stackframe/mcp-server
+
+## 2.7.27
+
+initial release
diff --git a/apps/mcp-server/openapi/.gitignore b/apps/mcp-server/openapi/.gitignore
new file mode 100644
index 000000000..a6c57f5fb
--- /dev/null
+++ b/apps/mcp-server/openapi/.gitignore
@@ -0,0 +1 @@
+*.json
diff --git a/apps/mcp-server/package.json b/apps/mcp-server/package.json
new file mode 100644
index 000000000..850ba1d63
--- /dev/null
+++ b/apps/mcp-server/package.json
@@ -0,0 +1,29 @@
+{
+ "name": "@stackframe/mcp-server",
+ "version": "2.7.27",
+ "private": true,
+ "type": "module",
+ "bin": {
+ "mcp-server": "./build/index.js"
+ },
+ "scripts": {
+ "start": "tsx src/index.ts",
+ "dev-mcp-server": "tsx watch --clear-screen=false src/index.ts",
+ "typecheck": "tsc --noEmit",
+ "lint": "eslint .",
+ "clean": "rimraf build && rimraf node_modules && rimraf openapi/*.json",
+ "build": "tsc"
+ },
+ "files": [
+ "build"
+ ],
+ "dependencies": {
+ "@modelcontextprotocol/sdk": "^1.7.0",
+ "@stackframe/js": "workspace:*",
+ "openapi-types": "^12.1.3"
+ },
+ "devDependencies": {
+ "@types/node": "^22.13.10",
+ "typescript": "^5.8.2"
+ }
+}
diff --git a/apps/mcp-server/src/index.ts b/apps/mcp-server/src/index.ts
new file mode 100644
index 000000000..d059ec074
--- /dev/null
+++ b/apps/mcp-server/src/index.ts
@@ -0,0 +1,227 @@
+import { Server } from "@modelcontextprotocol/sdk/server/index.js";
+import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
+import {
+ CallToolRequestSchema,
+ ListToolsRequestSchema,
+ ListToolsResult
+} from "@modelcontextprotocol/sdk/types.js";
+import { StackServerApp, stackAppInternalsSymbol } from "@stackframe/js";
+import { readFileSync } from "fs";
+import type { OpenAPIV3_1 } from 'openapi-types';
+import { convertParameterArrayToJsonSchema } from "./utils/openapi-to-jsonschema";
+
+
+const STACK_AUTH_URL = process.env.STACK_AUTH_URL ?? "https://api.stack-auth.com/";
+const STACK_SECRET_SERVER_KEY = process.env.STACK_SECRET_SERVER_KEY;
+const STACK_PROJECT_ID = process.env.STACK_PROJECT_ID;
+const STACK_PUBLISHABLE_CLIENT_KEY = process.env.STACK_PUBLISHABLE_CLIENT_KEY;
+
+
+if (!STACK_SECRET_SERVER_KEY || !STACK_PROJECT_ID || !STACK_PUBLISHABLE_CLIENT_KEY) {
+ throw new Error("STACK_SECRET_SERVER_KEY, STACK_PROJECT_ID, and STACK_PUBLISHABLE_CLIENT_KEY must be set");
+}
+
+export const stackServerApp = new StackServerApp({
+ baseUrl: STACK_AUTH_URL,
+ projectId: STACK_PROJECT_ID,
+ publishableClientKey: STACK_PUBLISHABLE_CLIENT_KEY,
+ secretServerKey: STACK_SECRET_SERVER_KEY,
+ tokenStore: "memory",
+});
+
+// Cursor only supports 40 endpoints, so we only expose the most useful tools
+const operationIDs = {
+ "getUserById": ["/users/{user_id}", "get"],
+ "updateUser": ["/users/{user_id}", "patch"],
+ "deleteUser": ["/users/{user_id}", "delete"],
+ "listUsers": ["/users", "get"],
+ "createUser": ["/users", "post"],
+ "listTeams": ["/teams", "get"],
+ "createTeam": ["/teams", "post"],
+ "listTeamMemberProfiles": ["/team-member-profiles", "get"],
+ "getTeamById": ["/teams/{team_id}", "get"],
+ "updateTeam": ["/teams/{team_id}", "patch"],
+ "deleteTeam": ["/teams/{team_id}", "delete"],
+ "addUserToTeam": ["/team-memberships/{team_id}/{user_id}", "post"],
+ "removeUserFromTeam": ["/team-memberships/{team_id}/{user_id}", "delete"],
+ "getTeamMemberProfile": ["/team-member-profiles/{team_id}/{user_id}", "get"],
+ "updateTeamMemberProfile": ["/team-member-profiles/{team_id}/{user_id}", "patch"],
+ "sendTeamInvitationCode": ["/team-invitations/send-code", "post"],
+ "grantPermissionToUser": ["/team-permissions/{team_id}/{user_id}/{permission_id}", "post"],
+ "revokePermissionFromUser": ["/team-permissions/{team_id}/{user_id}/{permission_id}", "delete"],
+ "listTeamPermissions": ["/team-permissions", "get"],
+ "getContactChannel": ["/contact-channels/{user_id}/{contact_channel_id}", "get"],
+ "updateContactChannel": ["/contact-channels/{user_id}/{contact_channel_id}", "patch"],
+ "deleteContactChannel": ["/contact-channels/{user_id}/{contact_channel_id}", "delete"],
+ "listContactChannels": ["/contact-channels", "get"]
+};
+
+function getOpenAPISchema(): OpenAPIV3_1.Document {
+ return JSON.parse(readFileSync("./openapi/server.json", "utf8"));
+}
+
+function isOperationObject(obj: any): obj is OpenAPIV3_1.OperationObject {
+ return obj !== null && typeof obj === 'object' && 'parameters' in obj;
+}
+
+
+function getOperationObject(openAPISchema: OpenAPIV3_1.Document, path: string, method: string): OpenAPIV3_1.OperationObject {
+ const pathItem = openAPISchema.paths?.[path];
+ if (!pathItem) {
+ throw new Error(`Could not find path item ${path} in openAPI schema`);
+ }
+ const operation = pathItem[method as keyof typeof pathItem];
+ if (!operation) {
+ throw new Error(`Could not find method ${method} in path item ${path} in openAPI schema`);
+ }
+ if (!isOperationObject(operation)) {
+ throw new Error(`Method ${method} in path ${path} is not an operation object`);
+ }
+ return operation;
+}
+
+type ToolType = {
+ path: string,
+ method: string,
+ name: string,
+ description: string | undefined,
+ inputSchema: {
+ [x: string]: unknown,
+ type: "object",
+ properties?: {
+ [x: string]: unknown,
+ } | undefined,
+ },
+}
+
+
+function getToolsFromOpenAPI(openAPISchema: OpenAPIV3_1.Document): ToolType[] {
+ const tools: ToolType[] = Object.entries(operationIDs).map(([operationID, [path, method]]) => {
+ const operation = getOperationObject(openAPISchema, path, method);
+ const inputSchema = !operation.parameters ? {
+ type: "object" as const,
+ properties: {},
+ required: [],
+ } : convertParameterArrayToJsonSchema(operation.parameters, operation.requestBody);
+
+
+ return {
+ name: operationID,
+ description: operation.description,
+ inputSchema,
+ path,
+ method,
+ };
+ });
+
+ return tools;
+}
+
+
+async function main() {
+
+ const openAPISchema = getOpenAPISchema();
+ const tools = getToolsFromOpenAPI(openAPISchema);
+ const transport = new StdioServerTransport();
+ const version = (await import("../package.json", { assert: { type: "json" } })).default.version;
+
+ // Create server instance
+ const server = new Server({
+ name: "stackauth",
+ version,
+ }, {
+ capabilities: {
+ tools: {}
+ }
+ });
+
+ server.setRequestHandler(ListToolsRequestSchema,
+ (): ListToolsResult => ({
+ tools
+ })
+ );
+
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
+ const name = request.params.name;
+ const args = request.params.arguments ?? {};
+
+ const tool = tools.find(tool => tool.name === name);
+
+ if (!tool) {
+ return {
+ isError: true,
+ content: [{ type: "text", text: `Tool ${name} not found` }],
+ };
+ }
+
+ const path = tool.path;
+ const method = tool.method.toUpperCase();
+
+
+ // Split args into path and query parameters
+ const queryParams = new URLSearchParams();
+ const pathParams: Record = {};
+
+ for (const [key, value] of Object.entries(args)) {
+ if (key.endsWith("###query")) {
+ const paramName = key.replace("###query", "");
+ queryParams.append(paramName, String(value));
+ } else if (key.endsWith("###path")) {
+ const paramName = key.replace("###path", "");
+ pathParams[paramName] = String(value);
+ }
+ }
+
+ // Replace path parameters
+ let finalPath = path;
+ for (const [key, value] of Object.entries(pathParams)) {
+ finalPath = finalPath.replace(`{${key}}`, value);
+ }
+
+ // Add query string if we have query parameters
+ const queryString = queryParams.toString();
+ if (queryString) {
+ finalPath += `?${queryString}`;
+ }
+
+ let body: string | undefined;
+ let headers: Record | undefined;
+ // LIMITATION: we only support JSON body for now
+ if (args["###body###"] && typeof args["###body###"] === "string") {
+ body = args["###body###"];
+ headers = {
+ "Content-Type": "application/json",
+ };
+ }
+
+ const result = await (stackServerApp as any)[stackAppInternalsSymbol].sendRequest(finalPath, {
+ method,
+ headers: {
+ // Hack to make api call as a server and not client, should probably create a new (internal) function for this
+ "x-stack-secret-server-key": STACK_SECRET_SERVER_KEY,
+ ...headers,
+ },
+ body,
+ }, "server");
+
+ if (!result.ok) {
+ return {
+ isError: true,
+ content: [{ type: "text", text: `Error: ${result.status} ${await result.text()}` }],
+ };
+ }
+
+ return {
+ content: [{ type: "text", text: JSON.stringify(await result.json(), null, 2) }],
+ };
+
+
+ });
+
+ await server.connect(transport);
+}
+
+main().catch((error) => {
+ console.error(error);
+ process.exit(1);
+});
diff --git a/apps/mcp-server/src/utils/openapi-to-jsonschema.ts b/apps/mcp-server/src/utils/openapi-to-jsonschema.ts
new file mode 100644
index 000000000..9f3cc236c
--- /dev/null
+++ b/apps/mcp-server/src/utils/openapi-to-jsonschema.ts
@@ -0,0 +1,155 @@
+/**
+ * Type definitions for OpenAPI Parameter Object
+ */
+import type { OpenAPIV3_1 } from 'openapi-types';
+
+/**
+ * Type definition for JSON Schema
+ */
+type JSONSchema = {
+ type: 'object',
+ properties: Record,
+ required?: string[],
+}
+
+/**
+ * Type guard to check if an object is a ReferenceObject
+ * @param obj - Object to check
+ * @returns True if object is a ReferenceObject, false otherwise
+ */
+function isReferenceObject(obj: any): obj is OpenAPIV3_1.ReferenceObject {
+ return obj !== null && typeof obj === 'object' && '$ref' in obj;
+}
+
+
+/**
+ * Converts an OpenAPI Parameter Object Array to a JSON Schema
+ * @param parameterObjectArray - Array of OpenAPI Parameter Objects
+ * @returns JSON Schema representation of the parameters
+ */
+function convertParameterArrayToJsonSchema(parameterObjectArray: (OpenAPIV3_1.ParameterObject | OpenAPIV3_1.ReferenceObject)[], requestBody?: OpenAPIV3_1.RequestBodyObject | OpenAPIV3_1.ReferenceObject): {
+ type: "object",
+ properties: Record,
+ required: string[],
+} {
+ if (!Array.isArray(parameterObjectArray)) {
+ throw new Error('Input must be an array of parameter objects');
+ }
+
+
+ const properties = new Map();
+ const requiredParams: string[] = [];
+
+ parameterObjectArray.forEach(param => {
+
+ if (isReferenceObject(param)) {
+ throw new Error('Reference objects are not supported');
+ }
+ if (!param.name) {
+ throw new Error('Parameter object must have a name');
+ }
+
+ const newParamName = param.name + "###" + param.in;
+
+ // Extract the schema from the parameter
+ let schema: Record = param.schema ?
+ (typeof param.schema === 'object' ? { ...param.schema } : {}) :
+ {};
+
+ // If the parameter has its own type/format, use those instead
+ if ('type' in param && param.type) {
+ schema.type = param.type;
+ }
+ if ('format' in param && param.format) {
+ schema.format = param.format;
+ }
+
+ // Copy description if available
+ if (param.description) {
+ schema.description = param.description;
+ }
+
+ // Copy example if available
+ if ('example' in param && param.example !== undefined) {
+ schema.example = param.example;
+ }
+
+ // Handle enum values
+ if ('enum' in param && param.enum) {
+ schema.enum = param.enum;
+ }
+
+ // Add default value if specified
+ if ('default' in param && param.default !== undefined) {
+ schema.default = param.default;
+ }
+
+ // Add parameter to properties
+ properties.set(newParamName, schema);
+
+ // Add to required array if necessary
+ if (param.required === true) {
+ requiredParams.push(newParamName);
+ }
+ });
+
+ if (requestBody) {
+ const body = handleRequestBody(requestBody);
+ if (body) {
+ properties.set("###body###", body.properties);
+ requiredParams.push("###body###");
+ }
+ }
+
+ // Convert Map back to Record for return type
+ const propertiesRecord: Record = {};
+ properties.forEach((value, key) => {
+ propertiesRecord[key] = value;
+ });
+
+ const jsonSchema = {
+ type: 'object' as const,
+ properties: propertiesRecord,
+ required: requiredParams
+ };
+
+
+ return jsonSchema;
+}
+
+export { convertParameterArrayToJsonSchema };
+export type { JSONSchema };
+
+
+function handleRequestBody(requestBody: OpenAPIV3_1.RequestBodyObject | OpenAPIV3_1.ReferenceObject) {
+
+ if (isReferenceObject(requestBody)) {
+ throw new Error('Reference objects are not supported');
+ }
+
+
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
+ if (!requestBody.content["application/json"]) {
+ throw new Error('Request body must be of type application/json');
+ }
+ const body_schema = requestBody.content["application/json"].schema;
+ if (!body_schema || isReferenceObject(body_schema)) {
+ throw new Error('Reference objects are not supported');
+ }
+
+ if (!body_schema.properties) {
+ return;
+ }
+
+ // We simplify the body into one property, called "body"
+
+ return {
+ type: "string",
+ properties: {
+ body: JSON.stringify(body_schema)
+ },
+ required: ["body"]
+ };
+
+
+}
diff --git a/apps/mcp-server/tsconfig.json b/apps/mcp-server/tsconfig.json
new file mode 100644
index 000000000..ecea5c293
--- /dev/null
+++ b/apps/mcp-server/tsconfig.json
@@ -0,0 +1,37 @@
+{
+ "compilerOptions": {
+ "lib": [
+ "dom",
+ "dom.iterable",
+ "esnext"
+ ],
+ "allowJs": true,
+ "strict": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "noErrorTruncation": true,
+ "outDir": "./build",
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": [
+ "./src/*"
+ ]
+ },
+ "skipLibCheck": true
+ },
+ "include": [
+ "src/**/*.ts"
+ ],
+ "exclude": [
+ "node_modules"
+ ]
+}
diff --git a/docker/server/Dockerfile b/docker/server/Dockerfile
index 78c339387..b46f0d859 100644
--- a/docker/server/Dockerfile
+++ b/docker/server/Dockerfile
@@ -26,7 +26,7 @@ COPY . .
RUN tsx ./scripts/generate-sdks.ts
# https://turbo.build/repo/docs/guides/tools/docker
-RUN turbo prune --scope=@stackframe/stack-backend --scope=@stackframe/stack-dashboard --docker
+RUN turbo prune --scope=@stackframe/stack-backend --scope=@stackframe/stack-dashboard --scope=@stackframe/mcp-server --docker
# Build stage
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index dfdc94203..e7c49eebd 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -255,7 +255,7 @@ importers:
version: 5.0.7
tsup:
specifier: ^8.3.0
- version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.7.3)(yaml@2.4.5)
+ version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.8.2)(yaml@2.4.5)
tsx:
specifier: ^4.7.2
version: 4.15.5
@@ -438,6 +438,25 @@ importers:
specifier: ^1.2.1
version: 1.2.1
+ apps/mcp-server:
+ dependencies:
+ '@modelcontextprotocol/sdk':
+ specifier: ^1.7.0
+ version: 1.7.0
+ '@stackframe/js':
+ specifier: workspace:*
+ version: link:../../packages/js
+ openapi-types:
+ specifier: ^12.1.3
+ version: 12.1.3
+ devDependencies:
+ '@types/node':
+ specifier: ^22.13.10
+ version: 22.13.10
+ typescript:
+ specifier: ^5.8.2
+ version: 5.8.2
+
apps/mock-oauth-server:
dependencies:
'@types/express':
@@ -670,7 +689,7 @@ importers:
version: 5.7.3
vite:
specifier: ^6.1.0
- version: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)
+ version: 6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)
examples/middleware:
dependencies:
@@ -766,7 +785,7 @@ importers:
version: 18.3.1
'@vitejs/plugin-react':
specifier: ^4.3.4
- version: 4.3.4(vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0))
+ version: 4.3.4(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0))
eslint:
specifier: ^9.19.0
version: 9.21.0(jiti@2.4.2)
@@ -787,7 +806,7 @@ importers:
version: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)
vite:
specifier: ^6.1.0
- version: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)
+ version: 6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)
examples/supabase:
dependencies:
@@ -946,7 +965,7 @@ importers:
version: 3.4.14
tsup:
specifier: ^8.0.2
- version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.7.3)(yaml@2.6.0)
+ version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.8.2)(yaml@2.6.0)
packages/react:
dependencies:
@@ -1064,7 +1083,7 @@ importers:
version: 3.4.14
tsup:
specifier: ^8.0.2
- version: 8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.6.0)
+ version: 8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.6.0)
packages/stack:
dependencies:
@@ -1188,7 +1207,7 @@ importers:
version: 3.4.14
tsup:
specifier: ^8.0.2
- version: 8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.7.3)
+ version: 8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.8.2)
packages/stack-emails:
dependencies:
@@ -1604,7 +1623,7 @@ importers:
version: 3.4.14
tsup:
specifier: ^8.0.2
- version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.7.3)(yaml@2.6.0)
+ version: 8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.8.2)(yaml@2.6.0)
packages:
@@ -3445,6 +3464,10 @@ packages:
'@types/react': ^18.2.0
react: '>=16'
+ '@modelcontextprotocol/sdk@1.7.0':
+ resolution: {integrity: sha512-IYPe/FLpvF3IZrd/f5p5ffmWhMc3aEMuM2wGJASDqC2Ge7qatVCdbfPx3n/5xFeb19xN0j/911M2AaFuircsWA==}
+ engines: {node: '>=18'}
+
'@monaco-editor/loader@1.4.0':
resolution: {integrity: sha512-00ioBig0x642hytVspPl7DbQyaSWRaolYie/UFNjoTdvoKPzo6xrXLhTk9ixgIKcLH5b5vDOjVNiGyY+uDCUlg==}
peerDependencies:
@@ -6319,6 +6342,9 @@ packages:
'@types/node@20.17.6':
resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==}
+ '@types/node@22.13.10':
+ resolution: {integrity: sha512-I6LPUvlRH+O6VRUqYOcMudhaIdUVWfsjnZavnsraHvpBwaEyMN29ry+0UVJhImYL16xsscu0aske3yA+uPOWfw==}
+
'@types/node@22.13.5':
resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==}
@@ -6664,6 +6690,10 @@ packages:
resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==}
engines: {node: '>= 0.6'}
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
accessor-fn@1.5.1:
resolution: {integrity: sha512-zZpFYBqIL1Aqg+f2qmYHJ8+yIZF7/tP6PUGx2/QM0uGPSO5UegpinmkNwDohxWtOj586BpMPVRUjce2HI6xB3A==}
engines: {node: '>=12'}
@@ -6987,6 +7017,10 @@ packages:
resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
+ body-parser@2.1.0:
+ resolution: {integrity: sha512-/hPxh61E+ll0Ujp24Ilm64cykicul1ypfwjVttduAiEdtnJFvLePSrIPk+HMImtNv5270wOGCb1Tns2rybMkoQ==}
+ engines: {node: '>=18'}
+
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -7434,6 +7468,10 @@ packages:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
+ content-disposition@1.0.0:
+ resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
+ engines: {node: '>= 0.6'}
+
content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
@@ -7447,6 +7485,10 @@ packages:
cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
+
cookie@0.4.2:
resolution: {integrity: sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==}
engines: {node: '>= 0.6'}
@@ -7644,6 +7686,15 @@ packages:
supports-color:
optional: true
+ debug@4.3.6:
+ resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
debug@4.3.7:
resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
engines: {node: '>=6.0'}
@@ -8308,6 +8359,14 @@ packages:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
+ eventsource-parser@3.0.0:
+ resolution: {integrity: sha512-T1C0XCUimhxVQzW4zFipdx0SficT651NnkR0ZSH3yQwh+mFMdLfgjABVi4YtMTtaL4s168593DaoaRLMqryavA==}
+ engines: {node: '>=18.0.0'}
+
+ eventsource@3.0.5:
+ resolution: {integrity: sha512-LT/5J605bx5SNyE+ITBDiM3FxffBiq9un7Vx0EwMDM3vg8sWKx/tO2zC+LMqZ+smAM0F2hblaDZUVZF0te2pSw==}
+ engines: {node: '>=18.0.0'}
+
execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
engines: {node: '>=10'}
@@ -8324,10 +8383,20 @@ packages:
resolution: {integrity: sha512-6CX17Cu+rC2Fi2CyZ4CkgVG3hLl6BFsdAxfXiZkmDFIDY4mRx2y2spdeH6dqPHI9rP+AsHEfGeKz84Uuw7+Pmg==}
engines: {node: ^v12.20.0 || >=v14.13.0}
+ express-rate-limit@7.5.0:
+ resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ express: ^4.11 || 5 || ^5.0.0-beta.1
+
express@4.21.2:
resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==}
engines: {node: '>= 0.10.0'}
+ express@5.0.1:
+ resolution: {integrity: sha512-ORF7g6qGnD+YtUG9yx4DFoqCShNMmUKiXuT5oWMHiOvt/4WFbHC6yCwQMTSBMno7AqntNCAzzcnnjowRkTL9eQ==}
+ engines: {node: '>= 18'}
+
extend@3.0.2:
resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
@@ -8403,6 +8472,10 @@ packages:
resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==}
engines: {node: '>= 0.8'}
+ finalhandler@2.1.0:
+ resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
+ engines: {node: '>= 0.8'}
+
find-root@1.1.0:
resolution: {integrity: sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==}
@@ -8495,6 +8568,10 @@ packages:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
fs-constants@1.0.0:
resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
@@ -8885,6 +8962,10 @@ packages:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
+ iconv-lite@0.5.2:
+ resolution: {integrity: sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag==}
+ engines: {node: '>=0.10.0'}
+
iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
@@ -9134,6 +9215,9 @@ packages:
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
is-reference@1.2.1:
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
@@ -9660,6 +9744,10 @@ packages:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
+ media-typer@1.1.0:
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
+
memfs-browser@3.5.10302:
resolution: {integrity: sha512-JJTc/nh3ig05O0gBBGZjTCPOyydaTxNF0uHYBrcc1gHNnO+KIHIvo0Y1FKCJsaei6FCl8C6xfQomXqu+cuzkIw==}
@@ -9674,6 +9762,10 @@ packages:
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+ merge-descriptors@2.0.0:
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -9809,6 +9901,10 @@ packages:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
+ mime-db@1.53.0:
+ resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==}
+ engines: {node: '>= 0.6'}
+
mime-types@2.1.18:
resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==}
engines: {node: '>= 0.6'}
@@ -9817,6 +9913,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime-types@3.0.0:
+ resolution: {integrity: sha512-XqoSHeCGjVClAmoGFG3lVFqQFRIrTVw2OH3axRqAcfaw+gHWIfnASS92AV+Rl/mk0MupgZTRHQOjxY6YVnzK5w==}
+ engines: {node: '>= 0.6'}
+
mime@1.6.0:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
@@ -9972,6 +10072,10 @@ packages:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
@@ -10218,6 +10322,10 @@ packages:
resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
engines: {node: '>= 0.4'}
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
object-keys@1.1.1:
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
engines: {node: '>= 0.4'}
@@ -10283,6 +10391,9 @@ packages:
resolution: {integrity: sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==}
engines: {node: '>=18'}
+ openapi-types@12.1.3:
+ resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==}
+
opener@1.5.2:
resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==}
hasBin: true
@@ -10431,6 +10542,10 @@ packages:
path-to-regexp@6.2.2:
resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==}
+ path-to-regexp@8.2.0:
+ resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
+ engines: {node: '>=16'}
+
path-type@4.0.0:
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
engines: {node: '>=8'}
@@ -10487,6 +10602,10 @@ packages:
resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
engines: {node: '>= 6'}
+ pkce-challenge@4.1.0:
+ resolution: {integrity: sha512-ZBmhE1C9LcPoH9XZSdwiPtbPHZROwAnMy+kIFQVrnMCxY4Cudlz3gBOpzilgc0jOgRaiT3sIWfpMomW2ar2orQ==}
+ engines: {node: '>=16.20.0'}
+
pkg-types@1.2.1:
resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
@@ -10719,6 +10838,10 @@ packages:
resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==}
engines: {node: '>=0.6'}
+ qs@6.14.0:
+ resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
+ engines: {node: '>=0.6'}
+
querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
@@ -10761,6 +10884,10 @@ packages:
resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==}
engines: {node: '>= 0.8'}
+ raw-body@3.0.0:
+ resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
+ engines: {node: '>= 0.8'}
+
rc@1.2.8:
resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
hasBin: true
@@ -11145,6 +11272,10 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ router@2.1.0:
+ resolution: {integrity: sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==}
+ engines: {node: '>= 18'}
+
rrweb-cssom@0.7.1:
resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
@@ -11226,6 +11357,10 @@ packages:
resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==}
engines: {node: '>= 0.8.0'}
+ send@1.1.0:
+ resolution: {integrity: sha512-v67WcEouB5GxbTWL/4NeToqcZiAWEq90N888fczVArY8A79J0L4FD7vj5hm3eUMua5EpoQ59wa/oovY6TLvRUA==}
+ engines: {node: '>= 18'}
+
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
@@ -11236,6 +11371,10 @@ packages:
resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==}
engines: {node: '>= 0.8.0'}
+ serve-static@2.1.0:
+ resolution: {integrity: sha512-A3We5UfEjG8Z7VkDv6uItWw6HY2bBSBJT1KtVESn6EOoOr2jAxNhxWCLY3jDE2WcuHXByWju74ck3ZgLwL8xmA==}
+ engines: {node: '>= 18'}
+
serve@14.2.4:
resolution: {integrity: sha512-qy1S34PJ/fcY8gjVGszDB3EXiPSk5FKhUa7tQe0UPRddxRidc2V6cNHPNewbE1D7MAkgLuWEt3Vw56vYy73tzQ==}
engines: {node: '>= 14'}
@@ -11300,10 +11439,26 @@ packages:
shimmer@1.2.1:
resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==}
+ side-channel-list@1.0.0:
+ resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
side-channel@1.0.6:
resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
engines: {node: '>= 0.4'}
+ side-channel@1.1.0:
+ resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
+ engines: {node: '>= 0.4'}
+
siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
@@ -12013,6 +12168,10 @@ packages:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'}
+ type-is@2.0.0:
+ resolution: {integrity: sha512-gd0sGezQYCbWSbkZr75mln4YBidWUN60+devscpLF5mtRDUpiaTvKpBNrdaCvel1NdR2k6vclXybU5fBd2i+nw==}
+ engines: {node: '>= 0.6'}
+
typed-array-buffer@1.0.2:
resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
engines: {node: '>= 0.4'}
@@ -12051,6 +12210,11 @@ packages:
engines: {node: '>=14.17'}
hasBin: true
+ typescript@5.8.2:
+ resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
ufo@1.5.4:
resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
@@ -12618,6 +12782,11 @@ packages:
yup@1.4.0:
resolution: {integrity: sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==}
+ zod-to-json-schema@3.24.4:
+ resolution: {integrity: sha512-0uNlcvgabyrni9Ag8Vghj21drk7+7tp7VTwwR7KxxXXc/3pbXz2PHlDgj3cICahgF1kHm4dExBFj7BXrZJXzig==}
+ peerDependencies:
+ zod: ^3.24.1
+
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
@@ -14273,6 +14442,20 @@ snapshots:
'@types/react': 18.3.12
react: 18.3.1
+ '@modelcontextprotocol/sdk@1.7.0':
+ dependencies:
+ content-type: 1.0.5
+ cors: 2.8.5
+ eventsource: 3.0.5
+ express: 5.0.1
+ express-rate-limit: 7.5.0(express@5.0.1)
+ pkce-challenge: 4.1.0
+ raw-body: 3.0.0
+ zod: 3.23.8
+ zod-to-json-schema: 3.24.4(zod@3.23.8)
+ transitivePeerDependencies:
+ - supports-color
+
'@monaco-editor/loader@1.4.0(monaco-editor@0.52.2)':
dependencies:
monaco-editor: 0.52.2
@@ -17335,6 +17518,10 @@ snapshots:
dependencies:
undici-types: 6.19.8
+ '@types/node@22.13.10':
+ dependencies:
+ undici-types: 6.20.0
+
'@types/node@22.13.5':
dependencies:
undici-types: 6.20.0
@@ -17647,14 +17834,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0))':
+ '@vitejs/plugin-react@4.3.4(vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0))':
dependencies:
'@babel/core': 7.26.9
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.9)
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.9)
'@types/babel__core': 7.20.5
react-refresh: 0.14.2
- vite: 6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)
+ vite: 6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0)
transitivePeerDependencies:
- supports-color
@@ -17778,6 +17965,11 @@ snapshots:
mime-types: 2.1.35
negotiator: 0.6.3
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.0
+ negotiator: 1.0.0
+
accessor-fn@1.5.1: {}
acorn-import-attributes@1.9.5(acorn@8.14.0):
@@ -18179,6 +18371,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ body-parser@2.1.0:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.0
+ http-errors: 2.0.0
+ iconv-lite: 0.5.2
+ on-finished: 2.4.1
+ qs: 6.14.0
+ raw-body: 3.0.0
+ type-is: 2.0.0
+ transitivePeerDependencies:
+ - supports-color
+
boolbase@1.0.0: {}
boxen@7.0.0:
@@ -18657,6 +18863,10 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ content-disposition@1.0.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
content-type@1.0.5: {}
convert-source-map@1.9.0: {}
@@ -18665,6 +18875,8 @@ snapshots:
cookie-signature@1.0.6: {}
+ cookie-signature@1.2.2: {}
+
cookie@0.4.2: {}
cookie@0.6.0: {}
@@ -18859,6 +19071,10 @@ snapshots:
dependencies:
ms: 2.1.2
+ debug@4.3.6:
+ dependencies:
+ ms: 2.1.2
+
debug@4.3.7:
dependencies:
ms: 2.1.3
@@ -19435,8 +19651,8 @@ snapshots:
'@typescript-eslint/parser': 6.21.0(eslint@8.30.0)(typescript@5.3.3)
eslint: 8.30.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.30.0)
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0)
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0)
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.30.0)
eslint-plugin-react: 7.37.2(eslint@8.30.0)
eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.30.0)
@@ -19517,13 +19733,13 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.30.0):
+ eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0):
dependencies:
'@nolyfill/is-core-module': 1.0.39
debug: 4.3.7
enhanced-resolve: 5.17.1
eslint: 8.30.0
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0)
fast-glob: 3.3.2
get-tsconfig: 4.8.1
is-bun-module: 1.2.1
@@ -19547,14 +19763,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0):
dependencies:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 6.21.0(eslint@8.30.0)(typescript@5.3.3)
eslint: 8.30.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0)(eslint@8.30.0)
+ eslint-import-resolver-typescript: 3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0)
transitivePeerDependencies:
- supports-color
@@ -19603,7 +19819,7 @@ snapshots:
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -19614,7 +19830,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.30.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3)(eslint@8.30.0)
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.3(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.30.0)(typescript@5.3.3))(eslint@8.30.0))(eslint@8.30.0))(eslint@8.30.0)
hasown: 2.0.2
is-core-module: 2.15.1
is-glob: 4.0.3
@@ -19940,6 +20156,12 @@ snapshots:
events@3.3.0: {}
+ eventsource-parser@3.0.0: {}
+
+ eventsource@3.0.5:
+ dependencies:
+ eventsource-parser: 3.0.0
+
execa@5.1.1:
dependencies:
cross-spawn: 7.0.5
@@ -19968,6 +20190,10 @@ snapshots:
export-to-csv@1.4.0: {}
+ express-rate-limit@7.5.0(express@5.0.1):
+ dependencies:
+ express: 5.0.1
+
express@4.21.2:
dependencies:
accepts: 1.3.8
@@ -20004,6 +20230,43 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ express@5.0.1:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.1.0
+ content-disposition: 1.0.0
+ content-type: 1.0.5
+ cookie: 0.7.1
+ cookie-signature: 1.2.2
+ debug: 4.3.6
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.0
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ merge-descriptors: 2.0.0
+ methods: 1.1.2
+ mime-types: 3.0.0
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.13.0
+ range-parser: 1.2.1
+ router: 2.1.0
+ safe-buffer: 5.2.1
+ send: 1.1.0
+ serve-static: 2.1.0
+ setprototypeof: 1.2.0
+ statuses: 2.0.1
+ type-is: 2.0.0
+ utils-merge: 1.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
extend@3.0.2: {}
extendable-error@0.1.7: {}
@@ -20074,6 +20337,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ finalhandler@2.1.0:
+ dependencies:
+ debug: 4.4.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
find-root@1.1.0: {}
find-up@3.0.0:
@@ -20153,6 +20427,8 @@ snapshots:
fresh@0.5.2: {}
+ fresh@2.0.0: {}
+
fs-constants@1.0.0: {}
fs-extra@11.2.0:
@@ -20726,6 +21002,10 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ iconv-lite@0.5.2:
+ dependencies:
+ safer-buffer: 2.1.2
+
iconv-lite@0.6.3:
dependencies:
safer-buffer: 2.1.2
@@ -20943,6 +21223,8 @@ snapshots:
is-potential-custom-element-name@1.0.1: {}
+ is-promise@4.0.0: {}
+
is-reference@1.2.1:
dependencies:
'@types/estree': 1.0.6
@@ -21576,6 +21858,8 @@ snapshots:
media-typer@0.3.0: {}
+ media-typer@1.1.0: {}
+
memfs-browser@3.5.10302:
dependencies:
memfs: 3.5.3
@@ -21602,6 +21886,8 @@ snapshots:
merge-descriptors@1.0.3: {}
+ merge-descriptors@2.0.0: {}
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
@@ -21896,6 +22182,8 @@ snapshots:
mime-db@1.52.0: {}
+ mime-db@1.53.0: {}
+
mime-types@2.1.18:
dependencies:
mime-db: 1.33.0
@@ -21904,6 +22192,10 @@ snapshots:
dependencies:
mime-db: 1.52.0
+ mime-types@3.0.0:
+ dependencies:
+ mime-db: 1.53.0
+
mime@1.6.0: {}
mimic-fn@2.1.0: {}
@@ -22018,6 +22310,8 @@ snapshots:
negotiator@0.6.3: {}
+ negotiator@1.0.0: {}
+
neo-async@2.6.2: {}
next-intl@3.19.1(next@14.2.5(@babel/core@7.26.9)(@opentelemetry/api@1.9.0)(react-dom@18.3.1(react@18.2.0))(react@18.2.0))(react@18.3.1):
@@ -22508,6 +22802,8 @@ snapshots:
object-inspect@1.13.2: {}
+ object-inspect@1.13.4: {}
+
object-keys@1.1.1: {}
object.assign@4.1.5:
@@ -22600,6 +22896,8 @@ snapshots:
is-inside-container: 1.0.0
is-wsl: 3.1.0
+ openapi-types@12.1.3: {}
+
opener@1.5.2: {}
openid-client@5.6.4(patch_hash=2gg7ly76yaettle5dlvkpcfpny):
@@ -22755,6 +23053,8 @@ snapshots:
path-to-regexp@6.2.2: {}
+ path-to-regexp@8.2.0: {}
+
path-type@4.0.0: {}
path@0.12.7:
@@ -22800,6 +23100,8 @@ snapshots:
pirates@4.0.6: {}
+ pkce-challenge@4.1.0: {}
+
pkg-types@1.2.1:
dependencies:
confbox: 0.1.8
@@ -23107,6 +23409,10 @@ snapshots:
dependencies:
side-channel: 1.0.6
+ qs@6.14.0:
+ dependencies:
+ side-channel: 1.1.0
+
querystringify@2.2.0: {}
queue-microtask@1.2.3: {}
@@ -23142,6 +23448,13 @@ snapshots:
iconv-lite: 0.4.24
unpipe: 1.0.0
+ raw-body@3.0.0:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.0
+ iconv-lite: 0.6.3
+ unpipe: 1.0.0
+
rc@1.2.8:
dependencies:
deep-extend: 0.6.0
@@ -23734,6 +24047,12 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.34.8
fsevents: 2.3.3
+ router@2.1.0:
+ dependencies:
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.2.0
+
rrweb-cssom@0.7.1: {}
rsvp@3.2.1: {}
@@ -23819,6 +24138,23 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ send@1.1.0:
+ dependencies:
+ debug: 4.4.0
+ destroy: 1.2.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 0.5.2
+ http-errors: 2.0.0
+ mime-types: 2.1.35
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
serialize-javascript@6.0.2:
dependencies:
randombytes: 2.1.0
@@ -23842,6 +24178,15 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ serve-static@2.1.0:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.1.0
+ transitivePeerDependencies:
+ - supports-color
+
serve@14.2.4:
dependencies:
'@zeit/schemas': 2.36.0
@@ -23969,6 +24314,26 @@ snapshots:
shimmer@1.2.1: {}
+ side-channel-list@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.3
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
side-channel@1.0.6:
dependencies:
call-bind: 1.0.7
@@ -23976,6 +24341,14 @@ snapshots:
get-intrinsic: 1.2.4
object-inspect: 1.13.2
+ side-channel@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.0
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
siginfo@2.0.0: {}
signal-exit@3.0.7: {}
@@ -24713,7 +25086,7 @@ snapshots:
tsscmp@1.0.6: {}
- tsup@8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.7.3):
+ tsup@8.1.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(postcss@8.4.47)(typescript@5.8.2):
dependencies:
bundle-require: 4.2.1(esbuild@0.21.5)
cac: 6.7.14
@@ -24732,12 +25105,12 @@ snapshots:
optionalDependencies:
'@swc/core': 1.3.101(@swc/helpers@0.5.15)
postcss: 8.4.47
- typescript: 5.7.3
+ typescript: 5.8.2
transitivePeerDependencies:
- supports-color
- ts-node
- tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.7.3)(yaml@2.6.0):
+ tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.4.47)(tsx@4.16.2)(typescript@5.8.2)(yaml@2.6.0):
dependencies:
bundle-require: 5.0.0(esbuild@0.24.0)
cac: 6.7.14
@@ -24758,14 +25131,14 @@ snapshots:
optionalDependencies:
'@swc/core': 1.3.101(@swc/helpers@0.5.15)
postcss: 8.4.47
- typescript: 5.7.3
+ typescript: 5.8.2
transitivePeerDependencies:
- jiti
- supports-color
- tsx
- yaml
- tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.7.3)(yaml@2.4.5):
+ tsup@8.3.5(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.15.5)(typescript@5.8.2)(yaml@2.4.5):
dependencies:
bundle-require: 5.0.0(esbuild@0.24.0)
cac: 6.7.14
@@ -24786,7 +25159,7 @@ snapshots:
optionalDependencies:
'@swc/core': 1.3.101(@swc/helpers@0.5.15)
postcss: 8.5.2
- typescript: 5.7.3
+ typescript: 5.8.2
transitivePeerDependencies:
- jiti
- supports-color
@@ -24821,7 +25194,7 @@ snapshots:
- tsx
- yaml
- tsup@8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.7.3)(yaml@2.6.0):
+ tsup@8.4.0(@swc/core@1.3.101(@swc/helpers@0.5.15))(jiti@2.4.2)(postcss@8.5.2)(tsx@4.19.2)(typescript@5.8.2)(yaml@2.6.0):
dependencies:
bundle-require: 5.1.0(esbuild@0.25.0)
cac: 6.7.14
@@ -24842,7 +25215,7 @@ snapshots:
optionalDependencies:
'@swc/core': 1.3.101(@swc/helpers@0.5.15)
postcss: 8.5.2
- typescript: 5.7.3
+ typescript: 5.8.2
transitivePeerDependencies:
- jiti
- supports-color
@@ -24963,6 +25336,12 @@ snapshots:
media-typer: 0.3.0
mime-types: 2.1.35
+ type-is@2.0.0:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.0
+
typed-array-buffer@1.0.2:
dependencies:
call-bind: 1.0.7
@@ -25011,6 +25390,8 @@ snapshots:
typescript@5.7.3: {}
+ typescript@5.8.2: {}
+
ufo@1.5.4: {}
uglify-js@3.18.0:
@@ -25314,13 +25695,13 @@ snapshots:
tsx: 4.19.3
yaml: 2.6.0
- vite@6.1.0(@types/node@22.13.5)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0):
+ vite@6.1.0(@types/node@22.13.10)(jiti@2.4.2)(lightningcss@1.29.1)(terser@5.31.1)(tsx@4.19.3)(yaml@2.6.0):
dependencies:
esbuild: 0.24.2
postcss: 8.5.2
rollup: 4.34.8
optionalDependencies:
- '@types/node': 22.13.5
+ '@types/node': 22.13.10
fsevents: 2.3.3
jiti: 2.4.2
lightningcss: 1.29.1
@@ -25674,6 +26055,10 @@ snapshots:
toposort: 2.0.2
type-fest: 2.19.0
+ zod-to-json-schema@3.24.4(zod@3.23.8):
+ dependencies:
+ zod: 3.23.8
+
zod@3.23.8: {}
zustand@4.5.2(@types/react@18.3.12)(immer@9.0.21)(react@18.2.0):
diff --git a/turbo.json b/turbo.json
index b1df4fb9d..fd82db3a4 100644
--- a/turbo.json
+++ b/turbo.json
@@ -64,6 +64,11 @@
"@stackframe/stack-backend#build"
]
},
+ "@stackframe/mcp-server#build": {
+ "dependsOn": [
+ "@stackframe/stack-backend#build"
+ ]
+ },
"@stackframe/stack-backend#build": {
"dependsOn": [
"codegen"