├── .github
└── workflows
│ └── stale.yaml
├── .gitignore
├── LICENSE
├── README.md
├── next-env.d.ts
├── next.config.mjs
├── package.json
├── pnpm-lock.yaml
├── pnpm-workspace.yaml
├── src
├── app
│ ├── api
│ │ └── mcp
│ │ │ └── [...all]
│ │ │ └── route.ts
│ ├── globals.css
│ ├── layout.tsx
│ └── page.tsx
├── index.test.ts
├── index.ts
└── server.ts
├── tsconfig.json
└── tsconfig.stdio.json
/.github/workflows/stale.yaml:
--------------------------------------------------------------------------------
1 | #####################################
2 | # DO NOT EDIT DIRECTLY. #
3 | # This file is managed by Terraform #
4 | #####################################
5 |
6 | name: "Close stale PRs"
7 | on:
8 | schedule:
9 | - cron: "30 1 * * *"
10 |
11 | jobs:
12 | stale:
13 | runs-on: ubuntu-latest
14 | # Read repo and write to PRs
15 | permissions:
16 | contents: read
17 | pull-requests: write
18 | issues: write
19 | steps:
20 | - uses: actions/stale@v9
21 | with:
22 | stale-pr-message: "This PR is stale because it has been open for 30 days with no activity. Remove stale label or comment or this will be closed in 7 days."
23 | close-pr-message: "This PR was closed because it has been stalled for 7 days with no activity."
24 | days-before-pr-stale: 30
25 | days-before-pr-close: 7
26 | exempt-pr-labels: "dependencies,security"
27 | operations-per-run: 60 # Default is 30
28 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Dependencies
2 | node_modules/
3 | package-lock.json
4 |
5 | # Build output
6 | build/
7 | dist/
8 |
9 | # Environment variables
10 | .env
11 | .env.local
12 | .env.*.local
13 |
14 | # IDE and editor files
15 | .vscode/
16 | .idea/
17 | *.swp
18 | *.swo
19 | .DS_Store
20 |
21 | # Logs
22 | logs/
23 | *.log
24 | npm-debug.log*
25 | yarn-debug.log*
26 | yarn-error.log*
27 |
28 | # Test coverage
29 | coverage/
30 |
31 | # Temporary files
32 | tmp/
33 | temp/
34 |
35 | .next/
36 | .vercel/
37 | .vercel/cache/
38 | .vercel/output/
39 | .vercel/output/static/
40 | .vercel/output/standalone/
41 |
42 | *.tsbuildinfo
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2025 Groq, Inc.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # groq-compound-mcp-server
2 |
3 | Provides a Model Context Protocol (MCP) server for interacting with Groq models, including compound/meta models.
4 |
5 | This server exposes the following tools:
6 | * `ask_with_realtime_information`
7 | * `ask_with_code_execution`
8 |
9 | ## Prerequisites
10 |
11 | * Node.js >= 18.0.0
12 | * A Groq API key set in the `GROQ_API_KEY` environment variable.
13 |
14 | ## Installation
15 |
16 | ```bash
17 | npm install groq-compound-mcp-server
18 | ```
19 |
20 | ## Usage
21 |
22 | This server follows the standard MCP server pattern using stdio for transport. It's designed to be run by an MCP client (like Claude Desktop or a custom client).
23 |
24 | Refer to the official [MCP Quickstart for Server Developers](https://modelcontextprotocol.io/quickstart/server) for instructions on setting up and connecting MCP servers.
25 |
26 | When configuring your client, use the command `npx groq-compound-mcp-server` or `groq-compound-mcp-server` (if installed globally) to run this server.
27 |
28 | Here's an example of how you might configure an MCP client (e.g., in a `settings.json` file) to launch this server:
29 |
30 | ```json
31 | {
32 | "mcpServers": {
33 | "groq-compound": {
34 | "command": "npx",
35 | "args": [
36 | "-y",
37 | "groq-compound-mcp-server"
38 | ],
39 | "env": {
40 | "GROQ_API_KEY": "YOUR_GROQ_API_KEY_HERE"
41 | }
42 | }
43 | }
44 | }
45 | ```
46 |
47 | ## Hosting on Vercel
48 |
49 | This server can also be deployed to Vercel.
50 |
51 | 1. **Prerequisites**:
52 | * Ensure you have a Vercel account.
53 | * Connect your Git repository to Vercel.
54 |
55 | 2. **Environment Variables**:
56 | Set the following environment variables in your Vercel project settings:
57 | * `GROQ_API_KEY`: Your Groq API key.
58 | * `REDIS_URL`: (Recommended for SSE transport) The connection URL for a Redis instance (e.g., from Vercel KV or Upstash).
59 |
60 | 3. **Build Configuration**:
61 | Vercel should automatically detect it as a Next.js application. The build command `npm run build:vercel` (or `yarn build:vercel`/`pnpm build:vercel`) and the output directory (`.next`) will be used.
62 |
63 | 4. **Accessing the MCP Server**:
64 | Once deployed, your MCP server endpoints will be available at `https://your-deployment-url.vercel.app/api/mcp`.
65 | For example, the SSE endpoint would be `https://your-deployment-url.vercel.app/api/mcp/sse`.
66 |
67 | ## Development with Vercel CLI
68 |
69 | To run the Vercel deployment locally:
70 |
71 | 1. Install Vercel CLI: `npm install -g vercel`
72 | 2. Set up environment variables locally (e.g., in a `.env.local` file at the project root):
73 | ```
74 | GROQ_API_KEY=your_groq_api_key
75 | REDIS_URL=your_redis_url
76 | ```
77 | 3. Run the development server: `vercel dev` or `npm run dev:vercel`.
78 |
79 | ## License
80 |
81 | [MIT](LICENSE)
82 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/app/building-your-application/configuring/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.mjs:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | const nextConfig = {
3 | // Your Next.js configuration options go here.
4 | // For example, to enable experimental features or set up rewrites/redirects.
5 | // We might need to add specific configurations later if required for MCP.
6 | reactStrictMode: true,
7 | };
8 |
9 | export default nextConfig;
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "groq-compound-mcp-server",
3 | "version": "0.1.7",
4 | "description": "MCP server for interacting with Groq models",
5 | "main": "build/index.js",
6 | "type": "module",
7 | "bin": {
8 | "groq-compound-mcp-server": "build/index.js"
9 | },
10 | "scripts": {
11 | "build": "next build && tsc -p tsconfig.stdio.json && chmod 755 build/index.js",
12 | "test": "tsx --test src/**/*.test.ts",
13 | "dev:vercel": "next dev",
14 | "build:vercel": "next build",
15 | "start:vercel": "next start"
16 | },
17 | "keywords": [
18 | "mcp",
19 | "groq",
20 | "compound"
21 | ],
22 | "author": "Rick Lamers",
23 | "license": "MIT",
24 | "repository": {
25 | "type": "git",
26 | "url": "git+https://github.com/groq/compound-mcp-server.git"
27 | },
28 | "bugs": {
29 | "url": "https://github.com/groq/compound-mcp-server/issues"
30 | },
31 | "homepage": "https://github.com/groq/compound-mcp-server#readme",
32 | "files": [
33 | "build"
34 | ],
35 | "engines": {
36 | "node": ">=18.0.0"
37 | },
38 | "dependencies": {
39 | "@modelcontextprotocol/sdk": "1.10.2",
40 | "groq-sdk": "^0.3.3",
41 | "zod": "^3.23.8",
42 | "@vercel/mcp-adapter": "^0.3.1",
43 | "next": "^14.2.3",
44 | "redis": "^4.6.13"
45 | },
46 | "devDependencies": {
47 | "@types/node": "^20.12.12",
48 | "@types/react": "^18.3.3",
49 | "tsx": "^4.19.3",
50 | "typescript": "^5.4.5"
51 | },
52 | "packageManager": "pnpm@10.9.0+sha512.0486e394640d3c1fb3c9d43d49cf92879ff74f8516959c235308f5a8f62e2e19528a65cdc2a3058f587cde71eba3d5b56327c8c33a97e4c4051ca48a10ca2d5f"
53 | }
54 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@modelcontextprotocol/sdk':
12 | specifier: 1.10.2
13 | version: 1.10.2
14 | '@vercel/mcp-adapter':
15 | specifier: ^0.3.1
16 | version: 0.3.1(next@14.2.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1))
17 | groq-sdk:
18 | specifier: ^0.3.3
19 | version: 0.3.3
20 | next:
21 | specifier: ^14.2.3
22 | version: 14.2.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
23 | redis:
24 | specifier: ^4.6.13
25 | version: 4.7.1
26 | zod:
27 | specifier: ^3.23.8
28 | version: 3.24.4
29 | devDependencies:
30 | '@types/node':
31 | specifier: ^20.12.12
32 | version: 20.17.46
33 | '@types/react':
34 | specifier: ^18.3.3
35 | version: 18.3.21
36 | tsx:
37 | specifier: ^4.19.3
38 | version: 4.19.4
39 | typescript:
40 | specifier: ^5.4.5
41 | version: 5.8.3
42 |
43 | packages:
44 |
45 | '@esbuild/aix-ppc64@0.25.4':
46 | resolution: {integrity: sha512-1VCICWypeQKhVbE9oW/sJaAmjLxhVqacdkvPLEjwlttjfwENRSClS8EjBz0KzRyFSCPDIkuXW34Je/vk7zdB7Q==}
47 | engines: {node: '>=18'}
48 | cpu: [ppc64]
49 | os: [aix]
50 |
51 | '@esbuild/android-arm64@0.25.4':
52 | resolution: {integrity: sha512-bBy69pgfhMGtCnwpC/x5QhfxAz/cBgQ9enbtwjf6V9lnPI/hMyT9iWpR1arm0l3kttTr4L0KSLpKmLp/ilKS9A==}
53 | engines: {node: '>=18'}
54 | cpu: [arm64]
55 | os: [android]
56 |
57 | '@esbuild/android-arm@0.25.4':
58 | resolution: {integrity: sha512-QNdQEps7DfFwE3hXiU4BZeOV68HHzYwGd0Nthhd3uCkkEKK7/R6MTgM0P7H7FAs5pU/DIWsviMmEGxEoxIZ+ZQ==}
59 | engines: {node: '>=18'}
60 | cpu: [arm]
61 | os: [android]
62 |
63 | '@esbuild/android-x64@0.25.4':
64 | resolution: {integrity: sha512-TVhdVtQIFuVpIIR282btcGC2oGQoSfZfmBdTip2anCaVYcqWlZXGcdcKIUklfX2wj0JklNYgz39OBqh2cqXvcQ==}
65 | engines: {node: '>=18'}
66 | cpu: [x64]
67 | os: [android]
68 |
69 | '@esbuild/darwin-arm64@0.25.4':
70 | resolution: {integrity: sha512-Y1giCfM4nlHDWEfSckMzeWNdQS31BQGs9/rouw6Ub91tkK79aIMTH3q9xHvzH8d0wDru5Ci0kWB8b3up/nl16g==}
71 | engines: {node: '>=18'}
72 | cpu: [arm64]
73 | os: [darwin]
74 |
75 | '@esbuild/darwin-x64@0.25.4':
76 | resolution: {integrity: sha512-CJsry8ZGM5VFVeyUYB3cdKpd/H69PYez4eJh1W/t38vzutdjEjtP7hB6eLKBoOdxcAlCtEYHzQ/PJ/oU9I4u0A==}
77 | engines: {node: '>=18'}
78 | cpu: [x64]
79 | os: [darwin]
80 |
81 | '@esbuild/freebsd-arm64@0.25.4':
82 | resolution: {integrity: sha512-yYq+39NlTRzU2XmoPW4l5Ifpl9fqSk0nAJYM/V/WUGPEFfek1epLHJIkTQM6bBs1swApjO5nWgvr843g6TjxuQ==}
83 | engines: {node: '>=18'}
84 | cpu: [arm64]
85 | os: [freebsd]
86 |
87 | '@esbuild/freebsd-x64@0.25.4':
88 | resolution: {integrity: sha512-0FgvOJ6UUMflsHSPLzdfDnnBBVoCDtBTVyn/MrWloUNvq/5SFmh13l3dvgRPkDihRxb77Y17MbqbCAa2strMQQ==}
89 | engines: {node: '>=18'}
90 | cpu: [x64]
91 | os: [freebsd]
92 |
93 | '@esbuild/linux-arm64@0.25.4':
94 | resolution: {integrity: sha512-+89UsQTfXdmjIvZS6nUnOOLoXnkUTB9hR5QAeLrQdzOSWZvNSAXAtcRDHWtqAUtAmv7ZM1WPOOeSxDzzzMogiQ==}
95 | engines: {node: '>=18'}
96 | cpu: [arm64]
97 | os: [linux]
98 |
99 | '@esbuild/linux-arm@0.25.4':
100 | resolution: {integrity: sha512-kro4c0P85GMfFYqW4TWOpvmF8rFShbWGnrLqlzp4X1TNWjRY3JMYUfDCtOxPKOIY8B0WC8HN51hGP4I4hz4AaQ==}
101 | engines: {node: '>=18'}
102 | cpu: [arm]
103 | os: [linux]
104 |
105 | '@esbuild/linux-ia32@0.25.4':
106 | resolution: {integrity: sha512-yTEjoapy8UP3rv8dB0ip3AfMpRbyhSN3+hY8mo/i4QXFeDxmiYbEKp3ZRjBKcOP862Ua4b1PDfwlvbuwY7hIGQ==}
107 | engines: {node: '>=18'}
108 | cpu: [ia32]
109 | os: [linux]
110 |
111 | '@esbuild/linux-loong64@0.25.4':
112 | resolution: {integrity: sha512-NeqqYkrcGzFwi6CGRGNMOjWGGSYOpqwCjS9fvaUlX5s3zwOtn1qwg1s2iE2svBe4Q/YOG1q6875lcAoQK/F4VA==}
113 | engines: {node: '>=18'}
114 | cpu: [loong64]
115 | os: [linux]
116 |
117 | '@esbuild/linux-mips64el@0.25.4':
118 | resolution: {integrity: sha512-IcvTlF9dtLrfL/M8WgNI/qJYBENP3ekgsHbYUIzEzq5XJzzVEV/fXY9WFPfEEXmu3ck2qJP8LG/p3Q8f7Zc2Xg==}
119 | engines: {node: '>=18'}
120 | cpu: [mips64el]
121 | os: [linux]
122 |
123 | '@esbuild/linux-ppc64@0.25.4':
124 | resolution: {integrity: sha512-HOy0aLTJTVtoTeGZh4HSXaO6M95qu4k5lJcH4gxv56iaycfz1S8GO/5Jh6X4Y1YiI0h7cRyLi+HixMR+88swag==}
125 | engines: {node: '>=18'}
126 | cpu: [ppc64]
127 | os: [linux]
128 |
129 | '@esbuild/linux-riscv64@0.25.4':
130 | resolution: {integrity: sha512-i8JUDAufpz9jOzo4yIShCTcXzS07vEgWzyX3NH2G7LEFVgrLEhjwL3ajFE4fZI3I4ZgiM7JH3GQ7ReObROvSUA==}
131 | engines: {node: '>=18'}
132 | cpu: [riscv64]
133 | os: [linux]
134 |
135 | '@esbuild/linux-s390x@0.25.4':
136 | resolution: {integrity: sha512-jFnu+6UbLlzIjPQpWCNh5QtrcNfMLjgIavnwPQAfoGx4q17ocOU9MsQ2QVvFxwQoWpZT8DvTLooTvmOQXkO51g==}
137 | engines: {node: '>=18'}
138 | cpu: [s390x]
139 | os: [linux]
140 |
141 | '@esbuild/linux-x64@0.25.4':
142 | resolution: {integrity: sha512-6e0cvXwzOnVWJHq+mskP8DNSrKBr1bULBvnFLpc1KY+d+irZSgZ02TGse5FsafKS5jg2e4pbvK6TPXaF/A6+CA==}
143 | engines: {node: '>=18'}
144 | cpu: [x64]
145 | os: [linux]
146 |
147 | '@esbuild/netbsd-arm64@0.25.4':
148 | resolution: {integrity: sha512-vUnkBYxZW4hL/ie91hSqaSNjulOnYXE1VSLusnvHg2u3jewJBz3YzB9+oCw8DABeVqZGg94t9tyZFoHma8gWZQ==}
149 | engines: {node: '>=18'}
150 | cpu: [arm64]
151 | os: [netbsd]
152 |
153 | '@esbuild/netbsd-x64@0.25.4':
154 | resolution: {integrity: sha512-XAg8pIQn5CzhOB8odIcAm42QsOfa98SBeKUdo4xa8OvX8LbMZqEtgeWE9P/Wxt7MlG2QqvjGths+nq48TrUiKw==}
155 | engines: {node: '>=18'}
156 | cpu: [x64]
157 | os: [netbsd]
158 |
159 | '@esbuild/openbsd-arm64@0.25.4':
160 | resolution: {integrity: sha512-Ct2WcFEANlFDtp1nVAXSNBPDxyU+j7+tId//iHXU2f/lN5AmO4zLyhDcpR5Cz1r08mVxzt3Jpyt4PmXQ1O6+7A==}
161 | engines: {node: '>=18'}
162 | cpu: [arm64]
163 | os: [openbsd]
164 |
165 | '@esbuild/openbsd-x64@0.25.4':
166 | resolution: {integrity: sha512-xAGGhyOQ9Otm1Xu8NT1ifGLnA6M3sJxZ6ixylb+vIUVzvvd6GOALpwQrYrtlPouMqd/vSbgehz6HaVk4+7Afhw==}
167 | engines: {node: '>=18'}
168 | cpu: [x64]
169 | os: [openbsd]
170 |
171 | '@esbuild/sunos-x64@0.25.4':
172 | resolution: {integrity: sha512-Mw+tzy4pp6wZEK0+Lwr76pWLjrtjmJyUB23tHKqEDP74R3q95luY/bXqXZeYl4NYlvwOqoRKlInQialgCKy67Q==}
173 | engines: {node: '>=18'}
174 | cpu: [x64]
175 | os: [sunos]
176 |
177 | '@esbuild/win32-arm64@0.25.4':
178 | resolution: {integrity: sha512-AVUP428VQTSddguz9dO9ngb+E5aScyg7nOeJDrF1HPYu555gmza3bDGMPhmVXL8svDSoqPCsCPjb265yG/kLKQ==}
179 | engines: {node: '>=18'}
180 | cpu: [arm64]
181 | os: [win32]
182 |
183 | '@esbuild/win32-ia32@0.25.4':
184 | resolution: {integrity: sha512-i1sW+1i+oWvQzSgfRcxxG2k4I9n3O9NRqy8U+uugaT2Dy7kLO9Y7wI72haOahxceMX8hZAzgGou1FhndRldxRg==}
185 | engines: {node: '>=18'}
186 | cpu: [ia32]
187 | os: [win32]
188 |
189 | '@esbuild/win32-x64@0.25.4':
190 | resolution: {integrity: sha512-nOT2vZNw6hJ+z43oP1SPea/G/6AbN6X+bGNhNuq8NtRHy4wsMhw765IKLNmnjek7GvjWBYQ8Q5VBoYTFg9y1UQ==}
191 | engines: {node: '>=18'}
192 | cpu: [x64]
193 | os: [win32]
194 |
195 | '@modelcontextprotocol/sdk@1.10.2':
196 | resolution: {integrity: sha512-rb6AMp2DR4SN+kc6L1ta2NCpApyA9WYNx3CrTSZvGxq9wH71bRur+zRqPfg0vQ9mjywR7qZdX2RGHOPq3ss+tA==}
197 | engines: {node: '>=18'}
198 |
199 | '@next/env@14.2.28':
200 | resolution: {integrity: sha512-PAmWhJfJQlP+kxZwCjrVd9QnR5x0R3u0mTXTiZDgSd4h5LdXmjxCCWbN9kq6hkZBOax8Rm3xDW5HagWyJuT37g==}
201 |
202 | '@next/swc-darwin-arm64@14.2.28':
203 | resolution: {integrity: sha512-kzGChl9setxYWpk3H6fTZXXPFFjg7urptLq5o5ZgYezCrqlemKttwMT5iFyx/p1e/JeglTwDFRtb923gTJ3R1w==}
204 | engines: {node: '>= 10'}
205 | cpu: [arm64]
206 | os: [darwin]
207 |
208 | '@next/swc-darwin-x64@14.2.28':
209 | resolution: {integrity: sha512-z6FXYHDJlFOzVEOiiJ/4NG8aLCeayZdcRSMjPDysW297Up6r22xw6Ea9AOwQqbNsth8JNgIK8EkWz2IDwaLQcw==}
210 | engines: {node: '>= 10'}
211 | cpu: [x64]
212 | os: [darwin]
213 |
214 | '@next/swc-linux-arm64-gnu@14.2.28':
215 | resolution: {integrity: sha512-9ARHLEQXhAilNJ7rgQX8xs9aH3yJSj888ssSjJLeldiZKR4D7N08MfMqljk77fAwZsWwsrp8ohHsMvurvv9liQ==}
216 | engines: {node: '>= 10'}
217 | cpu: [arm64]
218 | os: [linux]
219 |
220 | '@next/swc-linux-arm64-musl@14.2.28':
221 | resolution: {integrity: sha512-p6gvatI1nX41KCizEe6JkF0FS/cEEF0u23vKDpl+WhPe/fCTBeGkEBh7iW2cUM0rvquPVwPWdiUR6Ebr/kQWxQ==}
222 | engines: {node: '>= 10'}
223 | cpu: [arm64]
224 | os: [linux]
225 |
226 | '@next/swc-linux-x64-gnu@14.2.28':
227 | resolution: {integrity: sha512-nsiSnz2wO6GwMAX2o0iucONlVL7dNgKUqt/mDTATGO2NY59EO/ZKnKEr80BJFhuA5UC1KZOMblJHWZoqIJddpA==}
228 | engines: {node: '>= 10'}
229 | cpu: [x64]
230 | os: [linux]
231 |
232 | '@next/swc-linux-x64-musl@14.2.28':
233 | resolution: {integrity: sha512-+IuGQKoI3abrXFqx7GtlvNOpeExUH1mTIqCrh1LGFf8DnlUcTmOOCApEnPJUSLrSbzOdsF2ho2KhnQoO0I1RDw==}
234 | engines: {node: '>= 10'}
235 | cpu: [x64]
236 | os: [linux]
237 |
238 | '@next/swc-win32-arm64-msvc@14.2.28':
239 | resolution: {integrity: sha512-l61WZ3nevt4BAnGksUVFKy2uJP5DPz2E0Ma/Oklvo3sGj9sw3q7vBWONFRgz+ICiHpW5mV+mBrkB3XEubMrKaA==}
240 | engines: {node: '>= 10'}
241 | cpu: [arm64]
242 | os: [win32]
243 |
244 | '@next/swc-win32-ia32-msvc@14.2.28':
245 | resolution: {integrity: sha512-+Kcp1T3jHZnJ9v9VTJ/yf1t/xmtFAc/Sge4v7mVc1z+NYfYzisi8kJ9AsY8itbgq+WgEwMtOpiLLJsUy2qnXZw==}
246 | engines: {node: '>= 10'}
247 | cpu: [ia32]
248 | os: [win32]
249 |
250 | '@next/swc-win32-x64-msvc@14.2.28':
251 | resolution: {integrity: sha512-1gCmpvyhz7DkB1srRItJTnmR2UwQPAUXXIg9r0/56g3O8etGmwlX68skKXJOp9EejW3hhv7nSQUJ2raFiz4MoA==}
252 | engines: {node: '>= 10'}
253 | cpu: [x64]
254 | os: [win32]
255 |
256 | '@redis/bloom@1.2.0':
257 | resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==}
258 | peerDependencies:
259 | '@redis/client': ^1.0.0
260 |
261 | '@redis/client@1.6.1':
262 | resolution: {integrity: sha512-/KCsg3xSlR+nCK8/8ZYSknYxvXHwubJrU82F3Lm1Fp6789VQ0/3RJKfsmRXjqfaTA++23CvC3hqmqe/2GEt6Kw==}
263 | engines: {node: '>=14'}
264 |
265 | '@redis/graph@1.1.1':
266 | resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==}
267 | peerDependencies:
268 | '@redis/client': ^1.0.0
269 |
270 | '@redis/json@1.0.7':
271 | resolution: {integrity: sha512-6UyXfjVaTBTJtKNG4/9Z8PSpKE6XgSyEb8iwaqDcy+uKrd/DGYHTWkUdnQDyzm727V7p21WUMhsqz5oy65kPcQ==}
272 | peerDependencies:
273 | '@redis/client': ^1.0.0
274 |
275 | '@redis/search@1.2.0':
276 | resolution: {integrity: sha512-tYoDBbtqOVigEDMAcTGsRlMycIIjwMCgD8eR2t0NANeQmgK/lvxNAvYyb6bZDD4frHRhIHkJu2TBRvB0ERkOmw==}
277 | peerDependencies:
278 | '@redis/client': ^1.0.0
279 |
280 | '@redis/time-series@1.1.0':
281 | resolution: {integrity: sha512-c1Q99M5ljsIuc4YdaCwfUEXsofakb9c8+Zse2qxTadu8TalLXuAESzLvFAvNVbkmSlvlzIQOLpBCmWI9wTOt+g==}
282 | peerDependencies:
283 | '@redis/client': ^1.0.0
284 |
285 | '@swc/counter@0.1.3':
286 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==}
287 |
288 | '@swc/helpers@0.5.5':
289 | resolution: {integrity: sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==}
290 |
291 | '@types/node-fetch@2.6.12':
292 | resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==}
293 |
294 | '@types/node@18.19.100':
295 | resolution: {integrity: sha512-ojmMP8SZBKprc3qGrGk8Ujpo80AXkrP7G2tOT4VWr5jlr5DHjsJF+emXJz+Wm0glmy4Js62oKMdZZ6B9Y+tEcA==}
296 |
297 | '@types/node@20.17.46':
298 | resolution: {integrity: sha512-0PQHLhZPWOxGW4auogW0eOQAuNIlCYvibIpG67ja0TOJ6/sehu+1en7sfceUn+QQtx4Rk3GxbLNwPh0Cav7TWw==}
299 |
300 | '@types/prop-types@15.7.14':
301 | resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
302 |
303 | '@types/react@18.3.21':
304 | resolution: {integrity: sha512-gXLBtmlcRJeT09/sI4PxVwyrku6SaNUj/6cMubjE6T6XdY1fDmBL7r0nX0jbSZPU/Xr0KuwLLZh6aOYY5d91Xw==}
305 |
306 | '@vercel/mcp-adapter@0.3.1':
307 | resolution: {integrity: sha512-8qZ5h0iiUhZXDnvsQDBYr6CIBPmsq2lH9uvKZCveVpDjdS9ngFhGJ8el25UthpMXGtS6saHBlTyvcreWskVSJA==}
308 | peerDependencies:
309 | next: '>=13.0.0'
310 |
311 | abort-controller@3.0.0:
312 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
313 | engines: {node: '>=6.5'}
314 |
315 | accepts@2.0.0:
316 | resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
317 | engines: {node: '>= 0.6'}
318 |
319 | agentkeepalive@4.6.0:
320 | resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==}
321 | engines: {node: '>= 8.0.0'}
322 |
323 | asynckit@0.4.0:
324 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
325 |
326 | base-64@0.1.0:
327 | resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==}
328 |
329 | body-parser@2.2.0:
330 | resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
331 | engines: {node: '>=18'}
332 |
333 | busboy@1.6.0:
334 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
335 | engines: {node: '>=10.16.0'}
336 |
337 | bytes@3.1.2:
338 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
339 | engines: {node: '>= 0.8'}
340 |
341 | call-bind-apply-helpers@1.0.2:
342 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
343 | engines: {node: '>= 0.4'}
344 |
345 | call-bound@1.0.4:
346 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
347 | engines: {node: '>= 0.4'}
348 |
349 | caniuse-lite@1.0.30001717:
350 | resolution: {integrity: sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw==}
351 |
352 | charenc@0.0.2:
353 | resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
354 |
355 | client-only@0.0.1:
356 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
357 |
358 | cluster-key-slot@1.1.2:
359 | resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
360 | engines: {node: '>=0.10.0'}
361 |
362 | combined-stream@1.0.8:
363 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
364 | engines: {node: '>= 0.8'}
365 |
366 | content-disposition@1.0.0:
367 | resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
368 | engines: {node: '>= 0.6'}
369 |
370 | content-type@1.0.5:
371 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
372 | engines: {node: '>= 0.6'}
373 |
374 | cookie-signature@1.2.2:
375 | resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
376 | engines: {node: '>=6.6.0'}
377 |
378 | cookie@0.7.2:
379 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
380 | engines: {node: '>= 0.6'}
381 |
382 | cors@2.8.5:
383 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
384 | engines: {node: '>= 0.10'}
385 |
386 | cross-spawn@7.0.6:
387 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
388 | engines: {node: '>= 8'}
389 |
390 | crypt@0.0.2:
391 | resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
392 |
393 | csstype@3.1.3:
394 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
395 |
396 | debug@4.4.0:
397 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
398 | engines: {node: '>=6.0'}
399 | peerDependencies:
400 | supports-color: '*'
401 | peerDependenciesMeta:
402 | supports-color:
403 | optional: true
404 |
405 | delayed-stream@1.0.0:
406 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
407 | engines: {node: '>=0.4.0'}
408 |
409 | depd@2.0.0:
410 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
411 | engines: {node: '>= 0.8'}
412 |
413 | digest-fetch@1.3.0:
414 | resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==}
415 |
416 | dunder-proto@1.0.1:
417 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
418 | engines: {node: '>= 0.4'}
419 |
420 | ee-first@1.1.1:
421 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
422 |
423 | encodeurl@2.0.0:
424 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
425 | engines: {node: '>= 0.8'}
426 |
427 | es-define-property@1.0.1:
428 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
429 | engines: {node: '>= 0.4'}
430 |
431 | es-errors@1.3.0:
432 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
433 | engines: {node: '>= 0.4'}
434 |
435 | es-object-atoms@1.1.1:
436 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
437 | engines: {node: '>= 0.4'}
438 |
439 | es-set-tostringtag@2.1.0:
440 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
441 | engines: {node: '>= 0.4'}
442 |
443 | esbuild@0.25.4:
444 | resolution: {integrity: sha512-8pgjLUcUjcgDg+2Q4NYXnPbo/vncAY4UmyaCm0jZevERqCHZIaWwdJHkf8XQtu4AxSKCdvrUbT0XUr1IdZzI8Q==}
445 | engines: {node: '>=18'}
446 | hasBin: true
447 |
448 | escape-html@1.0.3:
449 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
450 |
451 | etag@1.8.1:
452 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
453 | engines: {node: '>= 0.6'}
454 |
455 | event-target-shim@5.0.1:
456 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
457 | engines: {node: '>=6'}
458 |
459 | eventsource-parser@3.0.1:
460 | resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==}
461 | engines: {node: '>=18.0.0'}
462 |
463 | eventsource@3.0.7:
464 | resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==}
465 | engines: {node: '>=18.0.0'}
466 |
467 | express-rate-limit@7.5.0:
468 | resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==}
469 | engines: {node: '>= 16'}
470 | peerDependencies:
471 | express: ^4.11 || 5 || ^5.0.0-beta.1
472 |
473 | express@5.1.0:
474 | resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
475 | engines: {node: '>= 18'}
476 |
477 | finalhandler@2.1.0:
478 | resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
479 | engines: {node: '>= 0.8'}
480 |
481 | form-data-encoder@1.7.2:
482 | resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==}
483 |
484 | form-data@4.0.2:
485 | resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==}
486 | engines: {node: '>= 6'}
487 |
488 | formdata-node@4.4.1:
489 | resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
490 | engines: {node: '>= 12.20'}
491 |
492 | forwarded@0.2.0:
493 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
494 | engines: {node: '>= 0.6'}
495 |
496 | fresh@2.0.0:
497 | resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
498 | engines: {node: '>= 0.8'}
499 |
500 | fsevents@2.3.3:
501 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
502 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
503 | os: [darwin]
504 |
505 | function-bind@1.1.2:
506 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
507 |
508 | generic-pool@3.9.0:
509 | resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==}
510 | engines: {node: '>= 4'}
511 |
512 | get-intrinsic@1.3.0:
513 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
514 | engines: {node: '>= 0.4'}
515 |
516 | get-proto@1.0.1:
517 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
518 | engines: {node: '>= 0.4'}
519 |
520 | get-tsconfig@4.10.0:
521 | resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
522 |
523 | gopd@1.2.0:
524 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
525 | engines: {node: '>= 0.4'}
526 |
527 | graceful-fs@4.2.11:
528 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
529 |
530 | groq-sdk@0.3.3:
531 | resolution: {integrity: sha512-wdOeZ2QymPjjP3tmFpUAnfMisoLbt7xF2MfpROeFAngcqWbfTyB9j9pMWSEAMF/E4gZx8f2Y+5zswO0q92CSxA==}
532 |
533 | has-symbols@1.1.0:
534 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
535 | engines: {node: '>= 0.4'}
536 |
537 | has-tostringtag@1.0.2:
538 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
539 | engines: {node: '>= 0.4'}
540 |
541 | hasown@2.0.2:
542 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
543 | engines: {node: '>= 0.4'}
544 |
545 | http-errors@2.0.0:
546 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
547 | engines: {node: '>= 0.8'}
548 |
549 | humanize-ms@1.2.1:
550 | resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
551 |
552 | iconv-lite@0.6.3:
553 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
554 | engines: {node: '>=0.10.0'}
555 |
556 | inherits@2.0.4:
557 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
558 |
559 | ipaddr.js@1.9.1:
560 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
561 | engines: {node: '>= 0.10'}
562 |
563 | is-buffer@1.1.6:
564 | resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
565 |
566 | is-promise@4.0.0:
567 | resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
568 |
569 | isexe@2.0.0:
570 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
571 |
572 | js-tokens@4.0.0:
573 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
574 |
575 | loose-envify@1.4.0:
576 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
577 | hasBin: true
578 |
579 | math-intrinsics@1.1.0:
580 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
581 | engines: {node: '>= 0.4'}
582 |
583 | md5@2.3.0:
584 | resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
585 |
586 | media-typer@1.1.0:
587 | resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
588 | engines: {node: '>= 0.8'}
589 |
590 | merge-descriptors@2.0.0:
591 | resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
592 | engines: {node: '>=18'}
593 |
594 | mime-db@1.52.0:
595 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
596 | engines: {node: '>= 0.6'}
597 |
598 | mime-db@1.54.0:
599 | resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
600 | engines: {node: '>= 0.6'}
601 |
602 | mime-types@2.1.35:
603 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
604 | engines: {node: '>= 0.6'}
605 |
606 | mime-types@3.0.1:
607 | resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
608 | engines: {node: '>= 0.6'}
609 |
610 | ms@2.1.3:
611 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
612 |
613 | nanoid@3.3.11:
614 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
615 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
616 | hasBin: true
617 |
618 | negotiator@1.0.0:
619 | resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
620 | engines: {node: '>= 0.6'}
621 |
622 | next@14.2.28:
623 | resolution: {integrity: sha512-QLEIP/kYXynIxtcKB6vNjtWLVs3Y4Sb+EClTC/CSVzdLD1gIuItccpu/n1lhmduffI32iPGEK2cLLxxt28qgYA==}
624 | engines: {node: '>=18.17.0'}
625 | hasBin: true
626 | peerDependencies:
627 | '@opentelemetry/api': ^1.1.0
628 | '@playwright/test': ^1.41.2
629 | react: ^18.2.0
630 | react-dom: ^18.2.0
631 | sass: ^1.3.0
632 | peerDependenciesMeta:
633 | '@opentelemetry/api':
634 | optional: true
635 | '@playwright/test':
636 | optional: true
637 | sass:
638 | optional: true
639 |
640 | node-domexception@1.0.0:
641 | resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
642 | engines: {node: '>=10.5.0'}
643 | deprecated: Use your platform's native DOMException instead
644 |
645 | node-fetch@2.7.0:
646 | resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
647 | engines: {node: 4.x || >=6.0.0}
648 | peerDependencies:
649 | encoding: ^0.1.0
650 | peerDependenciesMeta:
651 | encoding:
652 | optional: true
653 |
654 | object-assign@4.1.1:
655 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
656 | engines: {node: '>=0.10.0'}
657 |
658 | object-inspect@1.13.4:
659 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
660 | engines: {node: '>= 0.4'}
661 |
662 | on-finished@2.4.1:
663 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
664 | engines: {node: '>= 0.8'}
665 |
666 | once@1.4.0:
667 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
668 |
669 | parseurl@1.3.3:
670 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
671 | engines: {node: '>= 0.8'}
672 |
673 | path-key@3.1.1:
674 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
675 | engines: {node: '>=8'}
676 |
677 | path-to-regexp@8.2.0:
678 | resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==}
679 | engines: {node: '>=16'}
680 |
681 | picocolors@1.1.1:
682 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
683 |
684 | pkce-challenge@5.0.0:
685 | resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
686 | engines: {node: '>=16.20.0'}
687 |
688 | postcss@8.4.31:
689 | resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==}
690 | engines: {node: ^10 || ^12 || >=14}
691 |
692 | proxy-addr@2.0.7:
693 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
694 | engines: {node: '>= 0.10'}
695 |
696 | qs@6.14.0:
697 | resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
698 | engines: {node: '>=0.6'}
699 |
700 | range-parser@1.2.1:
701 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
702 | engines: {node: '>= 0.6'}
703 |
704 | raw-body@3.0.0:
705 | resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==}
706 | engines: {node: '>= 0.8'}
707 |
708 | react-dom@18.3.1:
709 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
710 | peerDependencies:
711 | react: ^18.3.1
712 |
713 | react@18.3.1:
714 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
715 | engines: {node: '>=0.10.0'}
716 |
717 | redis@4.7.1:
718 | resolution: {integrity: sha512-S1bJDnqLftzHXHP8JsT5II/CtHWQrASX5K96REjWjlmWKrviSOLWmM7QnRLstAWsu1VBBV1ffV6DzCvxNP0UJQ==}
719 |
720 | resolve-pkg-maps@1.0.0:
721 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
722 |
723 | router@2.2.0:
724 | resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
725 | engines: {node: '>= 18'}
726 |
727 | safe-buffer@5.2.1:
728 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
729 |
730 | safer-buffer@2.1.2:
731 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
732 |
733 | scheduler@0.23.2:
734 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
735 |
736 | send@1.2.0:
737 | resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
738 | engines: {node: '>= 18'}
739 |
740 | serve-static@2.2.0:
741 | resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
742 | engines: {node: '>= 18'}
743 |
744 | setprototypeof@1.2.0:
745 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
746 |
747 | shebang-command@2.0.0:
748 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
749 | engines: {node: '>=8'}
750 |
751 | shebang-regex@3.0.0:
752 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
753 | engines: {node: '>=8'}
754 |
755 | side-channel-list@1.0.0:
756 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
757 | engines: {node: '>= 0.4'}
758 |
759 | side-channel-map@1.0.1:
760 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
761 | engines: {node: '>= 0.4'}
762 |
763 | side-channel-weakmap@1.0.2:
764 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
765 | engines: {node: '>= 0.4'}
766 |
767 | side-channel@1.1.0:
768 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
769 | engines: {node: '>= 0.4'}
770 |
771 | source-map-js@1.2.1:
772 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
773 | engines: {node: '>=0.10.0'}
774 |
775 | statuses@2.0.1:
776 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
777 | engines: {node: '>= 0.8'}
778 |
779 | streamsearch@1.1.0:
780 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
781 | engines: {node: '>=10.0.0'}
782 |
783 | styled-jsx@5.1.1:
784 | resolution: {integrity: sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==}
785 | engines: {node: '>= 12.0.0'}
786 | peerDependencies:
787 | '@babel/core': '*'
788 | babel-plugin-macros: '*'
789 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0'
790 | peerDependenciesMeta:
791 | '@babel/core':
792 | optional: true
793 | babel-plugin-macros:
794 | optional: true
795 |
796 | toidentifier@1.0.1:
797 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
798 | engines: {node: '>=0.6'}
799 |
800 | tr46@0.0.3:
801 | resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
802 |
803 | tslib@2.8.1:
804 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
805 |
806 | tsx@4.19.4:
807 | resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==}
808 | engines: {node: '>=18.0.0'}
809 | hasBin: true
810 |
811 | type-is@2.0.1:
812 | resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
813 | engines: {node: '>= 0.6'}
814 |
815 | typescript@5.8.3:
816 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==}
817 | engines: {node: '>=14.17'}
818 | hasBin: true
819 |
820 | undici-types@5.26.5:
821 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
822 |
823 | undici-types@6.19.8:
824 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
825 |
826 | unpipe@1.0.0:
827 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
828 | engines: {node: '>= 0.8'}
829 |
830 | vary@1.1.2:
831 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
832 | engines: {node: '>= 0.8'}
833 |
834 | web-streams-polyfill@3.3.3:
835 | resolution: {integrity: sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==}
836 | engines: {node: '>= 8'}
837 |
838 | web-streams-polyfill@4.0.0-beta.3:
839 | resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==}
840 | engines: {node: '>= 14'}
841 |
842 | webidl-conversions@3.0.1:
843 | resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
844 |
845 | whatwg-url@5.0.0:
846 | resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
847 |
848 | which@2.0.2:
849 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
850 | engines: {node: '>= 8'}
851 | hasBin: true
852 |
853 | wrappy@1.0.2:
854 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
855 |
856 | yallist@4.0.0:
857 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
858 |
859 | zod-to-json-schema@3.24.5:
860 | resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==}
861 | peerDependencies:
862 | zod: ^3.24.1
863 |
864 | zod@3.24.4:
865 | resolution: {integrity: sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==}
866 |
867 | snapshots:
868 |
869 | '@esbuild/aix-ppc64@0.25.4':
870 | optional: true
871 |
872 | '@esbuild/android-arm64@0.25.4':
873 | optional: true
874 |
875 | '@esbuild/android-arm@0.25.4':
876 | optional: true
877 |
878 | '@esbuild/android-x64@0.25.4':
879 | optional: true
880 |
881 | '@esbuild/darwin-arm64@0.25.4':
882 | optional: true
883 |
884 | '@esbuild/darwin-x64@0.25.4':
885 | optional: true
886 |
887 | '@esbuild/freebsd-arm64@0.25.4':
888 | optional: true
889 |
890 | '@esbuild/freebsd-x64@0.25.4':
891 | optional: true
892 |
893 | '@esbuild/linux-arm64@0.25.4':
894 | optional: true
895 |
896 | '@esbuild/linux-arm@0.25.4':
897 | optional: true
898 |
899 | '@esbuild/linux-ia32@0.25.4':
900 | optional: true
901 |
902 | '@esbuild/linux-loong64@0.25.4':
903 | optional: true
904 |
905 | '@esbuild/linux-mips64el@0.25.4':
906 | optional: true
907 |
908 | '@esbuild/linux-ppc64@0.25.4':
909 | optional: true
910 |
911 | '@esbuild/linux-riscv64@0.25.4':
912 | optional: true
913 |
914 | '@esbuild/linux-s390x@0.25.4':
915 | optional: true
916 |
917 | '@esbuild/linux-x64@0.25.4':
918 | optional: true
919 |
920 | '@esbuild/netbsd-arm64@0.25.4':
921 | optional: true
922 |
923 | '@esbuild/netbsd-x64@0.25.4':
924 | optional: true
925 |
926 | '@esbuild/openbsd-arm64@0.25.4':
927 | optional: true
928 |
929 | '@esbuild/openbsd-x64@0.25.4':
930 | optional: true
931 |
932 | '@esbuild/sunos-x64@0.25.4':
933 | optional: true
934 |
935 | '@esbuild/win32-arm64@0.25.4':
936 | optional: true
937 |
938 | '@esbuild/win32-ia32@0.25.4':
939 | optional: true
940 |
941 | '@esbuild/win32-x64@0.25.4':
942 | optional: true
943 |
944 | '@modelcontextprotocol/sdk@1.10.2':
945 | dependencies:
946 | content-type: 1.0.5
947 | cors: 2.8.5
948 | cross-spawn: 7.0.6
949 | eventsource: 3.0.7
950 | express: 5.1.0
951 | express-rate-limit: 7.5.0(express@5.1.0)
952 | pkce-challenge: 5.0.0
953 | raw-body: 3.0.0
954 | zod: 3.24.4
955 | zod-to-json-schema: 3.24.5(zod@3.24.4)
956 | transitivePeerDependencies:
957 | - supports-color
958 |
959 | '@next/env@14.2.28': {}
960 |
961 | '@next/swc-darwin-arm64@14.2.28':
962 | optional: true
963 |
964 | '@next/swc-darwin-x64@14.2.28':
965 | optional: true
966 |
967 | '@next/swc-linux-arm64-gnu@14.2.28':
968 | optional: true
969 |
970 | '@next/swc-linux-arm64-musl@14.2.28':
971 | optional: true
972 |
973 | '@next/swc-linux-x64-gnu@14.2.28':
974 | optional: true
975 |
976 | '@next/swc-linux-x64-musl@14.2.28':
977 | optional: true
978 |
979 | '@next/swc-win32-arm64-msvc@14.2.28':
980 | optional: true
981 |
982 | '@next/swc-win32-ia32-msvc@14.2.28':
983 | optional: true
984 |
985 | '@next/swc-win32-x64-msvc@14.2.28':
986 | optional: true
987 |
988 | '@redis/bloom@1.2.0(@redis/client@1.6.1)':
989 | dependencies:
990 | '@redis/client': 1.6.1
991 |
992 | '@redis/client@1.6.1':
993 | dependencies:
994 | cluster-key-slot: 1.1.2
995 | generic-pool: 3.9.0
996 | yallist: 4.0.0
997 |
998 | '@redis/graph@1.1.1(@redis/client@1.6.1)':
999 | dependencies:
1000 | '@redis/client': 1.6.1
1001 |
1002 | '@redis/json@1.0.7(@redis/client@1.6.1)':
1003 | dependencies:
1004 | '@redis/client': 1.6.1
1005 |
1006 | '@redis/search@1.2.0(@redis/client@1.6.1)':
1007 | dependencies:
1008 | '@redis/client': 1.6.1
1009 |
1010 | '@redis/time-series@1.1.0(@redis/client@1.6.1)':
1011 | dependencies:
1012 | '@redis/client': 1.6.1
1013 |
1014 | '@swc/counter@0.1.3': {}
1015 |
1016 | '@swc/helpers@0.5.5':
1017 | dependencies:
1018 | '@swc/counter': 0.1.3
1019 | tslib: 2.8.1
1020 |
1021 | '@types/node-fetch@2.6.12':
1022 | dependencies:
1023 | '@types/node': 20.17.46
1024 | form-data: 4.0.2
1025 |
1026 | '@types/node@18.19.100':
1027 | dependencies:
1028 | undici-types: 5.26.5
1029 |
1030 | '@types/node@20.17.46':
1031 | dependencies:
1032 | undici-types: 6.19.8
1033 |
1034 | '@types/prop-types@15.7.14': {}
1035 |
1036 | '@types/react@18.3.21':
1037 | dependencies:
1038 | '@types/prop-types': 15.7.14
1039 | csstype: 3.1.3
1040 |
1041 | '@vercel/mcp-adapter@0.3.1(next@14.2.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1))':
1042 | dependencies:
1043 | '@modelcontextprotocol/sdk': 1.10.2
1044 | next: 14.2.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
1045 | redis: 4.7.1
1046 | transitivePeerDependencies:
1047 | - supports-color
1048 |
1049 | abort-controller@3.0.0:
1050 | dependencies:
1051 | event-target-shim: 5.0.1
1052 |
1053 | accepts@2.0.0:
1054 | dependencies:
1055 | mime-types: 3.0.1
1056 | negotiator: 1.0.0
1057 |
1058 | agentkeepalive@4.6.0:
1059 | dependencies:
1060 | humanize-ms: 1.2.1
1061 |
1062 | asynckit@0.4.0: {}
1063 |
1064 | base-64@0.1.0: {}
1065 |
1066 | body-parser@2.2.0:
1067 | dependencies:
1068 | bytes: 3.1.2
1069 | content-type: 1.0.5
1070 | debug: 4.4.0
1071 | http-errors: 2.0.0
1072 | iconv-lite: 0.6.3
1073 | on-finished: 2.4.1
1074 | qs: 6.14.0
1075 | raw-body: 3.0.0
1076 | type-is: 2.0.1
1077 | transitivePeerDependencies:
1078 | - supports-color
1079 |
1080 | busboy@1.6.0:
1081 | dependencies:
1082 | streamsearch: 1.1.0
1083 |
1084 | bytes@3.1.2: {}
1085 |
1086 | call-bind-apply-helpers@1.0.2:
1087 | dependencies:
1088 | es-errors: 1.3.0
1089 | function-bind: 1.1.2
1090 |
1091 | call-bound@1.0.4:
1092 | dependencies:
1093 | call-bind-apply-helpers: 1.0.2
1094 | get-intrinsic: 1.3.0
1095 |
1096 | caniuse-lite@1.0.30001717: {}
1097 |
1098 | charenc@0.0.2: {}
1099 |
1100 | client-only@0.0.1: {}
1101 |
1102 | cluster-key-slot@1.1.2: {}
1103 |
1104 | combined-stream@1.0.8:
1105 | dependencies:
1106 | delayed-stream: 1.0.0
1107 |
1108 | content-disposition@1.0.0:
1109 | dependencies:
1110 | safe-buffer: 5.2.1
1111 |
1112 | content-type@1.0.5: {}
1113 |
1114 | cookie-signature@1.2.2: {}
1115 |
1116 | cookie@0.7.2: {}
1117 |
1118 | cors@2.8.5:
1119 | dependencies:
1120 | object-assign: 4.1.1
1121 | vary: 1.1.2
1122 |
1123 | cross-spawn@7.0.6:
1124 | dependencies:
1125 | path-key: 3.1.1
1126 | shebang-command: 2.0.0
1127 | which: 2.0.2
1128 |
1129 | crypt@0.0.2: {}
1130 |
1131 | csstype@3.1.3: {}
1132 |
1133 | debug@4.4.0:
1134 | dependencies:
1135 | ms: 2.1.3
1136 |
1137 | delayed-stream@1.0.0: {}
1138 |
1139 | depd@2.0.0: {}
1140 |
1141 | digest-fetch@1.3.0:
1142 | dependencies:
1143 | base-64: 0.1.0
1144 | md5: 2.3.0
1145 |
1146 | dunder-proto@1.0.1:
1147 | dependencies:
1148 | call-bind-apply-helpers: 1.0.2
1149 | es-errors: 1.3.0
1150 | gopd: 1.2.0
1151 |
1152 | ee-first@1.1.1: {}
1153 |
1154 | encodeurl@2.0.0: {}
1155 |
1156 | es-define-property@1.0.1: {}
1157 |
1158 | es-errors@1.3.0: {}
1159 |
1160 | es-object-atoms@1.1.1:
1161 | dependencies:
1162 | es-errors: 1.3.0
1163 |
1164 | es-set-tostringtag@2.1.0:
1165 | dependencies:
1166 | es-errors: 1.3.0
1167 | get-intrinsic: 1.3.0
1168 | has-tostringtag: 1.0.2
1169 | hasown: 2.0.2
1170 |
1171 | esbuild@0.25.4:
1172 | optionalDependencies:
1173 | '@esbuild/aix-ppc64': 0.25.4
1174 | '@esbuild/android-arm': 0.25.4
1175 | '@esbuild/android-arm64': 0.25.4
1176 | '@esbuild/android-x64': 0.25.4
1177 | '@esbuild/darwin-arm64': 0.25.4
1178 | '@esbuild/darwin-x64': 0.25.4
1179 | '@esbuild/freebsd-arm64': 0.25.4
1180 | '@esbuild/freebsd-x64': 0.25.4
1181 | '@esbuild/linux-arm': 0.25.4
1182 | '@esbuild/linux-arm64': 0.25.4
1183 | '@esbuild/linux-ia32': 0.25.4
1184 | '@esbuild/linux-loong64': 0.25.4
1185 | '@esbuild/linux-mips64el': 0.25.4
1186 | '@esbuild/linux-ppc64': 0.25.4
1187 | '@esbuild/linux-riscv64': 0.25.4
1188 | '@esbuild/linux-s390x': 0.25.4
1189 | '@esbuild/linux-x64': 0.25.4
1190 | '@esbuild/netbsd-arm64': 0.25.4
1191 | '@esbuild/netbsd-x64': 0.25.4
1192 | '@esbuild/openbsd-arm64': 0.25.4
1193 | '@esbuild/openbsd-x64': 0.25.4
1194 | '@esbuild/sunos-x64': 0.25.4
1195 | '@esbuild/win32-arm64': 0.25.4
1196 | '@esbuild/win32-ia32': 0.25.4
1197 | '@esbuild/win32-x64': 0.25.4
1198 |
1199 | escape-html@1.0.3: {}
1200 |
1201 | etag@1.8.1: {}
1202 |
1203 | event-target-shim@5.0.1: {}
1204 |
1205 | eventsource-parser@3.0.1: {}
1206 |
1207 | eventsource@3.0.7:
1208 | dependencies:
1209 | eventsource-parser: 3.0.1
1210 |
1211 | express-rate-limit@7.5.0(express@5.1.0):
1212 | dependencies:
1213 | express: 5.1.0
1214 |
1215 | express@5.1.0:
1216 | dependencies:
1217 | accepts: 2.0.0
1218 | body-parser: 2.2.0
1219 | content-disposition: 1.0.0
1220 | content-type: 1.0.5
1221 | cookie: 0.7.2
1222 | cookie-signature: 1.2.2
1223 | debug: 4.4.0
1224 | encodeurl: 2.0.0
1225 | escape-html: 1.0.3
1226 | etag: 1.8.1
1227 | finalhandler: 2.1.0
1228 | fresh: 2.0.0
1229 | http-errors: 2.0.0
1230 | merge-descriptors: 2.0.0
1231 | mime-types: 3.0.1
1232 | on-finished: 2.4.1
1233 | once: 1.4.0
1234 | parseurl: 1.3.3
1235 | proxy-addr: 2.0.7
1236 | qs: 6.14.0
1237 | range-parser: 1.2.1
1238 | router: 2.2.0
1239 | send: 1.2.0
1240 | serve-static: 2.2.0
1241 | statuses: 2.0.1
1242 | type-is: 2.0.1
1243 | vary: 1.1.2
1244 | transitivePeerDependencies:
1245 | - supports-color
1246 |
1247 | finalhandler@2.1.0:
1248 | dependencies:
1249 | debug: 4.4.0
1250 | encodeurl: 2.0.0
1251 | escape-html: 1.0.3
1252 | on-finished: 2.4.1
1253 | parseurl: 1.3.3
1254 | statuses: 2.0.1
1255 | transitivePeerDependencies:
1256 | - supports-color
1257 |
1258 | form-data-encoder@1.7.2: {}
1259 |
1260 | form-data@4.0.2:
1261 | dependencies:
1262 | asynckit: 0.4.0
1263 | combined-stream: 1.0.8
1264 | es-set-tostringtag: 2.1.0
1265 | mime-types: 2.1.35
1266 |
1267 | formdata-node@4.4.1:
1268 | dependencies:
1269 | node-domexception: 1.0.0
1270 | web-streams-polyfill: 4.0.0-beta.3
1271 |
1272 | forwarded@0.2.0: {}
1273 |
1274 | fresh@2.0.0: {}
1275 |
1276 | fsevents@2.3.3:
1277 | optional: true
1278 |
1279 | function-bind@1.1.2: {}
1280 |
1281 | generic-pool@3.9.0: {}
1282 |
1283 | get-intrinsic@1.3.0:
1284 | dependencies:
1285 | call-bind-apply-helpers: 1.0.2
1286 | es-define-property: 1.0.1
1287 | es-errors: 1.3.0
1288 | es-object-atoms: 1.1.1
1289 | function-bind: 1.1.2
1290 | get-proto: 1.0.1
1291 | gopd: 1.2.0
1292 | has-symbols: 1.1.0
1293 | hasown: 2.0.2
1294 | math-intrinsics: 1.1.0
1295 |
1296 | get-proto@1.0.1:
1297 | dependencies:
1298 | dunder-proto: 1.0.1
1299 | es-object-atoms: 1.1.1
1300 |
1301 | get-tsconfig@4.10.0:
1302 | dependencies:
1303 | resolve-pkg-maps: 1.0.0
1304 |
1305 | gopd@1.2.0: {}
1306 |
1307 | graceful-fs@4.2.11: {}
1308 |
1309 | groq-sdk@0.3.3:
1310 | dependencies:
1311 | '@types/node': 18.19.100
1312 | '@types/node-fetch': 2.6.12
1313 | abort-controller: 3.0.0
1314 | agentkeepalive: 4.6.0
1315 | digest-fetch: 1.3.0
1316 | form-data-encoder: 1.7.2
1317 | formdata-node: 4.4.1
1318 | node-fetch: 2.7.0
1319 | web-streams-polyfill: 3.3.3
1320 | transitivePeerDependencies:
1321 | - encoding
1322 |
1323 | has-symbols@1.1.0: {}
1324 |
1325 | has-tostringtag@1.0.2:
1326 | dependencies:
1327 | has-symbols: 1.1.0
1328 |
1329 | hasown@2.0.2:
1330 | dependencies:
1331 | function-bind: 1.1.2
1332 |
1333 | http-errors@2.0.0:
1334 | dependencies:
1335 | depd: 2.0.0
1336 | inherits: 2.0.4
1337 | setprototypeof: 1.2.0
1338 | statuses: 2.0.1
1339 | toidentifier: 1.0.1
1340 |
1341 | humanize-ms@1.2.1:
1342 | dependencies:
1343 | ms: 2.1.3
1344 |
1345 | iconv-lite@0.6.3:
1346 | dependencies:
1347 | safer-buffer: 2.1.2
1348 |
1349 | inherits@2.0.4: {}
1350 |
1351 | ipaddr.js@1.9.1: {}
1352 |
1353 | is-buffer@1.1.6: {}
1354 |
1355 | is-promise@4.0.0: {}
1356 |
1357 | isexe@2.0.0: {}
1358 |
1359 | js-tokens@4.0.0: {}
1360 |
1361 | loose-envify@1.4.0:
1362 | dependencies:
1363 | js-tokens: 4.0.0
1364 |
1365 | math-intrinsics@1.1.0: {}
1366 |
1367 | md5@2.3.0:
1368 | dependencies:
1369 | charenc: 0.0.2
1370 | crypt: 0.0.2
1371 | is-buffer: 1.1.6
1372 |
1373 | media-typer@1.1.0: {}
1374 |
1375 | merge-descriptors@2.0.0: {}
1376 |
1377 | mime-db@1.52.0: {}
1378 |
1379 | mime-db@1.54.0: {}
1380 |
1381 | mime-types@2.1.35:
1382 | dependencies:
1383 | mime-db: 1.52.0
1384 |
1385 | mime-types@3.0.1:
1386 | dependencies:
1387 | mime-db: 1.54.0
1388 |
1389 | ms@2.1.3: {}
1390 |
1391 | nanoid@3.3.11: {}
1392 |
1393 | negotiator@1.0.0: {}
1394 |
1395 | next@14.2.28(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
1396 | dependencies:
1397 | '@next/env': 14.2.28
1398 | '@swc/helpers': 0.5.5
1399 | busboy: 1.6.0
1400 | caniuse-lite: 1.0.30001717
1401 | graceful-fs: 4.2.11
1402 | postcss: 8.4.31
1403 | react: 18.3.1
1404 | react-dom: 18.3.1(react@18.3.1)
1405 | styled-jsx: 5.1.1(react@18.3.1)
1406 | optionalDependencies:
1407 | '@next/swc-darwin-arm64': 14.2.28
1408 | '@next/swc-darwin-x64': 14.2.28
1409 | '@next/swc-linux-arm64-gnu': 14.2.28
1410 | '@next/swc-linux-arm64-musl': 14.2.28
1411 | '@next/swc-linux-x64-gnu': 14.2.28
1412 | '@next/swc-linux-x64-musl': 14.2.28
1413 | '@next/swc-win32-arm64-msvc': 14.2.28
1414 | '@next/swc-win32-ia32-msvc': 14.2.28
1415 | '@next/swc-win32-x64-msvc': 14.2.28
1416 | transitivePeerDependencies:
1417 | - '@babel/core'
1418 | - babel-plugin-macros
1419 |
1420 | node-domexception@1.0.0: {}
1421 |
1422 | node-fetch@2.7.0:
1423 | dependencies:
1424 | whatwg-url: 5.0.0
1425 |
1426 | object-assign@4.1.1: {}
1427 |
1428 | object-inspect@1.13.4: {}
1429 |
1430 | on-finished@2.4.1:
1431 | dependencies:
1432 | ee-first: 1.1.1
1433 |
1434 | once@1.4.0:
1435 | dependencies:
1436 | wrappy: 1.0.2
1437 |
1438 | parseurl@1.3.3: {}
1439 |
1440 | path-key@3.1.1: {}
1441 |
1442 | path-to-regexp@8.2.0: {}
1443 |
1444 | picocolors@1.1.1: {}
1445 |
1446 | pkce-challenge@5.0.0: {}
1447 |
1448 | postcss@8.4.31:
1449 | dependencies:
1450 | nanoid: 3.3.11
1451 | picocolors: 1.1.1
1452 | source-map-js: 1.2.1
1453 |
1454 | proxy-addr@2.0.7:
1455 | dependencies:
1456 | forwarded: 0.2.0
1457 | ipaddr.js: 1.9.1
1458 |
1459 | qs@6.14.0:
1460 | dependencies:
1461 | side-channel: 1.1.0
1462 |
1463 | range-parser@1.2.1: {}
1464 |
1465 | raw-body@3.0.0:
1466 | dependencies:
1467 | bytes: 3.1.2
1468 | http-errors: 2.0.0
1469 | iconv-lite: 0.6.3
1470 | unpipe: 1.0.0
1471 |
1472 | react-dom@18.3.1(react@18.3.1):
1473 | dependencies:
1474 | loose-envify: 1.4.0
1475 | react: 18.3.1
1476 | scheduler: 0.23.2
1477 |
1478 | react@18.3.1:
1479 | dependencies:
1480 | loose-envify: 1.4.0
1481 |
1482 | redis@4.7.1:
1483 | dependencies:
1484 | '@redis/bloom': 1.2.0(@redis/client@1.6.1)
1485 | '@redis/client': 1.6.1
1486 | '@redis/graph': 1.1.1(@redis/client@1.6.1)
1487 | '@redis/json': 1.0.7(@redis/client@1.6.1)
1488 | '@redis/search': 1.2.0(@redis/client@1.6.1)
1489 | '@redis/time-series': 1.1.0(@redis/client@1.6.1)
1490 |
1491 | resolve-pkg-maps@1.0.0: {}
1492 |
1493 | router@2.2.0:
1494 | dependencies:
1495 | debug: 4.4.0
1496 | depd: 2.0.0
1497 | is-promise: 4.0.0
1498 | parseurl: 1.3.3
1499 | path-to-regexp: 8.2.0
1500 | transitivePeerDependencies:
1501 | - supports-color
1502 |
1503 | safe-buffer@5.2.1: {}
1504 |
1505 | safer-buffer@2.1.2: {}
1506 |
1507 | scheduler@0.23.2:
1508 | dependencies:
1509 | loose-envify: 1.4.0
1510 |
1511 | send@1.2.0:
1512 | dependencies:
1513 | debug: 4.4.0
1514 | encodeurl: 2.0.0
1515 | escape-html: 1.0.3
1516 | etag: 1.8.1
1517 | fresh: 2.0.0
1518 | http-errors: 2.0.0
1519 | mime-types: 3.0.1
1520 | ms: 2.1.3
1521 | on-finished: 2.4.1
1522 | range-parser: 1.2.1
1523 | statuses: 2.0.1
1524 | transitivePeerDependencies:
1525 | - supports-color
1526 |
1527 | serve-static@2.2.0:
1528 | dependencies:
1529 | encodeurl: 2.0.0
1530 | escape-html: 1.0.3
1531 | parseurl: 1.3.3
1532 | send: 1.2.0
1533 | transitivePeerDependencies:
1534 | - supports-color
1535 |
1536 | setprototypeof@1.2.0: {}
1537 |
1538 | shebang-command@2.0.0:
1539 | dependencies:
1540 | shebang-regex: 3.0.0
1541 |
1542 | shebang-regex@3.0.0: {}
1543 |
1544 | side-channel-list@1.0.0:
1545 | dependencies:
1546 | es-errors: 1.3.0
1547 | object-inspect: 1.13.4
1548 |
1549 | side-channel-map@1.0.1:
1550 | dependencies:
1551 | call-bound: 1.0.4
1552 | es-errors: 1.3.0
1553 | get-intrinsic: 1.3.0
1554 | object-inspect: 1.13.4
1555 |
1556 | side-channel-weakmap@1.0.2:
1557 | dependencies:
1558 | call-bound: 1.0.4
1559 | es-errors: 1.3.0
1560 | get-intrinsic: 1.3.0
1561 | object-inspect: 1.13.4
1562 | side-channel-map: 1.0.1
1563 |
1564 | side-channel@1.1.0:
1565 | dependencies:
1566 | es-errors: 1.3.0
1567 | object-inspect: 1.13.4
1568 | side-channel-list: 1.0.0
1569 | side-channel-map: 1.0.1
1570 | side-channel-weakmap: 1.0.2
1571 |
1572 | source-map-js@1.2.1: {}
1573 |
1574 | statuses@2.0.1: {}
1575 |
1576 | streamsearch@1.1.0: {}
1577 |
1578 | styled-jsx@5.1.1(react@18.3.1):
1579 | dependencies:
1580 | client-only: 0.0.1
1581 | react: 18.3.1
1582 |
1583 | toidentifier@1.0.1: {}
1584 |
1585 | tr46@0.0.3: {}
1586 |
1587 | tslib@2.8.1: {}
1588 |
1589 | tsx@4.19.4:
1590 | dependencies:
1591 | esbuild: 0.25.4
1592 | get-tsconfig: 4.10.0
1593 | optionalDependencies:
1594 | fsevents: 2.3.3
1595 |
1596 | type-is@2.0.1:
1597 | dependencies:
1598 | content-type: 1.0.5
1599 | media-typer: 1.1.0
1600 | mime-types: 3.0.1
1601 |
1602 | typescript@5.8.3: {}
1603 |
1604 | undici-types@5.26.5: {}
1605 |
1606 | undici-types@6.19.8: {}
1607 |
1608 | unpipe@1.0.0: {}
1609 |
1610 | vary@1.1.2: {}
1611 |
1612 | web-streams-polyfill@3.3.3: {}
1613 |
1614 | web-streams-polyfill@4.0.0-beta.3: {}
1615 |
1616 | webidl-conversions@3.0.1: {}
1617 |
1618 | whatwg-url@5.0.0:
1619 | dependencies:
1620 | tr46: 0.0.3
1621 | webidl-conversions: 3.0.1
1622 |
1623 | which@2.0.2:
1624 | dependencies:
1625 | isexe: 2.0.0
1626 |
1627 | wrappy@1.0.2: {}
1628 |
1629 | yallist@4.0.0: {}
1630 |
1631 | zod-to-json-schema@3.24.5(zod@3.24.4):
1632 | dependencies:
1633 | zod: 3.24.4
1634 |
1635 | zod@3.24.4: {}
1636 |
--------------------------------------------------------------------------------
/pnpm-workspace.yaml:
--------------------------------------------------------------------------------
1 | ignoredBuiltDependencies:
2 | - esbuild
3 |
--------------------------------------------------------------------------------
/src/app/api/mcp/[...all]/route.ts:
--------------------------------------------------------------------------------
1 | import { createMcpHandler } from '@vercel/mcp-adapter';
2 | import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3 | import { realtimeTool, replTool } from '@/server';
4 |
5 | const handler = createMcpHandler((adapterServer: McpServer) => {
6 | // Register tools from your existing server.ts on the server instance provided by the adapter
7 | adapterServer.tool(realtimeTool.name, realtimeTool.description, realtimeTool.schema, realtimeTool.handler);
8 | adapterServer.tool(replTool.name, replTool.description, replTool.schema, replTool.handler);
9 | }, undefined, {
10 | // AdapterConfig
11 | redisUrl: process.env.REDIS_URL,
12 | basePath: '/api/mcp', // This means your MCP endpoints will be /api/mcp/sse, /api/mcp/mcp, etc.
13 | verboseLogs: process.env.NODE_ENV === 'development', // Enable verbose logs in development
14 | maxDuration: 180, // Vercel Pro/Enterprise can go up to 300-900s for functions with Fluid enabled
15 | }
16 | );
17 |
18 | export { handler as GET, handler as POST, handler as OPTIONS }; // Add OPTIONS for CORS preflight if needed by clients
--------------------------------------------------------------------------------
/src/app/globals.css:
--------------------------------------------------------------------------------
1 | /* Add any global styles here */
2 | body {
3 | margin: 0;
4 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
5 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
6 | sans-serif;
7 | -webkit-font-smoothing: antialiased;
8 | -moz-osx-font-smoothing: grayscale;
9 | }
--------------------------------------------------------------------------------
/src/app/layout.tsx:
--------------------------------------------------------------------------------
1 | import type { Metadata } from 'next';
2 | import './globals.css'; // Optional: if you want to add global styles
3 |
4 | export const metadata: Metadata = {
5 | title: 'MCP Server',
6 | description: 'MCP Server hosted on Vercel',
7 | };
8 |
9 | export default function RootLayout({
10 | children,
11 | }: {
12 | children: React.ReactNode;
13 | }) {
14 | return (
15 |
16 |
{children}
17 |
18 | );
19 | }
--------------------------------------------------------------------------------
/src/app/page.tsx:
--------------------------------------------------------------------------------
1 | export default function HomePage() {
2 | return (
3 |
4 | MCP Server
5 | This Next.js app hosts an MCP server.
6 | The MCP API endpoints are available under /api/mcp.
7 |
8 | );
9 | }
--------------------------------------------------------------------------------
/src/index.test.ts:
--------------------------------------------------------------------------------
1 | import test from 'node:test';
2 | import assert from 'node:assert';
3 | import {
4 | realtimeToolArgsSchema,
5 | replToolArgsSchema
6 | } from './server.js'; // Import the exported Zod schemas
7 |
8 | test('Tool Argument Schemas', async (t) => {
9 |
10 | await t.test('Realtime Tool Schema Validation', () => {
11 | // Valid input
12 | const validResult1 = realtimeToolArgsSchema.safeParse({
13 | question: "What is the weather today?",
14 | });
15 | assert(validResult1.success, 'Valid input should parse successfully (1)');
16 | assert.strictEqual(validResult1.data?.question, "What is the weather today?");
17 | assert.strictEqual(validResult1.data?.model, 'compound-beta', 'Default model should be compound-beta');
18 |
19 | // Valid input with explicit model
20 | const validResult2 = realtimeToolArgsSchema.safeParse({
21 | question: "News summary?",
22 | model: "compound-beta-mini"
23 | });
24 | assert(validResult2.success, 'Valid input with model should parse successfully (2)');
25 | assert.strictEqual(validResult2.data?.model, 'compound-beta-mini');
26 |
27 | // Invalid input (missing question)
28 | const invalidResult1 = realtimeToolArgsSchema.safeParse({ model: "compound-beta" });
29 | assert(!invalidResult1.success, 'Missing question should fail parsing (3)');
30 |
31 | // Invalid input (wrong model enum)
32 | const invalidResult2 = realtimeToolArgsSchema.safeParse({ question: "Q?", model: "invalid-model" });
33 | assert(!invalidResult2.success, 'Invalid model enum should fail parsing (4)');
34 |
35 | // Invalid input (wrong type for question)
36 | const invalidResult3 = realtimeToolArgsSchema.safeParse({ question: 123 });
37 | assert(!invalidResult3.success, 'Wrong question type should fail parsing (5)');
38 | });
39 |
40 | await t.test('REPL Tool Schema Validation', () => {
41 | // Valid input
42 | const validResult1 = replToolArgsSchema.safeParse({
43 | question: "Calculate 5*5",
44 | });
45 | assert(validResult1.success, 'Valid input should parse successfully (6)');
46 | assert.strictEqual(validResult1.data?.question, "Calculate 5*5");
47 | assert.strictEqual(validResult1.data?.model, 'compound-beta', 'Default model should be compound-beta (7)');
48 |
49 | // Invalid input (missing question)
50 | const invalidResult1 = replToolArgsSchema.safeParse({});
51 | assert(!invalidResult1.success, 'Missing question should fail parsing (8)');
52 | });
53 |
54 | });
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
4 | import { server } from "./server.js";
5 |
6 | // Main function to run the server
7 | export async function main() {
8 | const transport = new StdioServerTransport();
9 | await server.connect(transport);
10 | console.error("Groq MCP Server running on stdio");
11 | }
12 |
13 | main().catch((error) => {
14 | console.error("Fatal error in main():", error);
15 | process.exit(1);
16 | });
--------------------------------------------------------------------------------
/src/server.ts:
--------------------------------------------------------------------------------
1 | import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2 | import { z } from "zod";
3 | import Groq from "groq-sdk";
4 |
5 | const ModelEnum = z.enum(["compound-beta", "compound-beta-mini"]);
6 | const ModeEnum = z.enum(["minimal", "verbose"]);
7 |
8 | // Define Tool Schemas
9 | export const realtimeToolArgsSchema = z.object({
10 | question: z.string().describe("The question to ask the model, especially if it requires real-time information (e.g., current news, recent events)."),
11 | model: ModelEnum.optional()
12 | .default("compound-beta")
13 | .describe("The model to use (compound-beta or compound-beta-mini). Defaults to compound-beta. Use compound-beta-mini for quick answers."),
14 | mode: ModeEnum.optional().default("minimal").describe("Response mode ('minimal' or 'verbose'). Defaults to 'minimal'. 'verbose' includes executed tools in the response. This is very verbose and should only be used when the user asks for it or when the user query cannot be answered without it (always first try without it)."),
15 | include_domains: z.array(z.string()).optional().describe("List of domains to specifically include in the search."),
16 | exclude_domains: z.array(z.string()).optional().describe("List of domains to exclude from the search."),
17 | });
18 |
19 | export const replToolArgsSchema = z.object({
20 | question: z.string().describe("The question to ask the model, especially one that benefits from Python REPL interaction (e.g., for intermediate calculations or code execution)."),
21 | model: ModelEnum.optional()
22 | .default("compound-beta")
23 | .describe("The model to use (compound-beta or compound-beta-mini). Defaults to compound-beta. Use compound-beta-mini for quick answers."),
24 | mode: ModeEnum.optional().default("minimal").describe("Response mode ('minimal' or 'verbose'). Defaults to 'minimal'. 'verbose' includes executed tools in the response. This is very verbose and should only be used when the user asks for it or when the user query cannot be answered without it (always first try without it)."),
25 | include_domains: z.array(z.string()).optional().describe("List of domains to specifically include in the search."),
26 | exclude_domains: z.array(z.string()).optional().describe("List of domains to exclude from the search."),
27 | });
28 |
29 | // Type alias for the arguments
30 | type ToolArgs = z.infer | z.infer;
31 |
32 | // Helper function to execute Groq chat completion
33 | async function executeGroqQuery(args: ToolArgs) {
34 | // Initialize Groq client lazily
35 | const groq = new Groq();
36 | try {
37 | const chatCompletion = await groq.chat.completions.create({
38 | messages: [
39 | {
40 | role: "user",
41 | content: args.question,
42 | },
43 | ],
44 | model: args.model,
45 | // Add include_domains and exclude_domains if they exist in args
46 | ...(args.include_domains && { include_domains: args.include_domains }),
47 | ...(args.exclude_domains && { exclude_domains: args.exclude_domains }),
48 | });
49 |
50 | const choice = chatCompletion.choices[0]?.message;
51 | const responseTextContent = choice?.content || "No response from model.";
52 | let finalResponseText = responseTextContent;
53 |
54 | // Check if verbose flag is true
55 | if ('mode' in args && args.mode === 'verbose') {
56 | // Use the logic to get executed_tools
57 | const executedTools = (choice as any)?.executed_tools ?? null;
58 | const responsePayload = {
59 | answer: responseTextContent,
60 | executed_tools: executedTools
61 | };
62 | finalResponseText = JSON.stringify(responsePayload, null, 2); // Pretty print JSON
63 | }
64 |
65 | return {
66 | content: [
67 | {
68 | type: "text" as const,
69 | text: finalResponseText, // Use the potentially modified response text
70 | },
71 | ],
72 | };
73 | } catch (error) {
74 | console.error("Error executing Groq query:", error);
75 | const errorMessage = error instanceof Error ? error.message : "An unknown error occurred";
76 | return {
77 | content: [
78 | {
79 | type: "text" as const,
80 | text: `Failed to get response from Groq: ${errorMessage}`,
81 | },
82 | ],
83 | };
84 | }
85 | }
86 |
87 | // --- Exportable Tool Definitions ---
88 | export const realtimeTool = {
89 | name: "ask_with_realtime_information",
90 | description: "Ask a question requiring real-time information (e.g., news, current events) using a Groq model.",
91 | schema: realtimeToolArgsSchema.shape,
92 | handler: executeGroqQuery,
93 | };
94 |
95 | export const replTool = {
96 | name: "ask_with_code_execution",
97 | description: "Ask questions that benefit from Python REPL interaction (e.g., for intermediate calculations or code execution).",
98 | schema: replToolArgsSchema.shape,
99 | handler: executeGroqQuery,
100 | };
101 | // ----------------------------------
102 |
103 | // Create MCP server instance
104 | export const server = new McpServer({
105 | name: "groq-interaction",
106 | version: "1.0.0",
107 | capabilities: {
108 | resources: {},
109 | tools: {},
110 | },
111 | });
112 |
113 | // Register tools using the exported definitions
114 | server.tool(realtimeTool.name, realtimeTool.description, realtimeTool.schema, realtimeTool.handler);
115 | server.tool(replTool.name, replTool.description, replTool.schema, replTool.handler);
116 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "lib": [
5 | "dom",
6 | "dom.iterable",
7 | "esnext"
8 | ],
9 | "allowJs": true,
10 | "module": "esnext",
11 | "moduleResolution": "bundler",
12 | "outDir": "./build",
13 | "baseUrl": ".",
14 | "strict": true,
15 | "esModuleInterop": true,
16 | "skipLibCheck": true,
17 | "forceConsistentCasingInFileNames": true,
18 | "isolatedModules": true,
19 | "jsx": "preserve",
20 | "incremental": true,
21 | "plugins": [
22 | {
23 | "name": "next"
24 | }
25 | ],
26 | "paths": {
27 | "@/*": [
28 | "./src/*"
29 | ]
30 | },
31 | "noEmit": true,
32 | "resolveJsonModule": true
33 | },
34 | "include": [
35 | "src/**/*.ts",
36 | "src/**/*.tsx",
37 | ".next/types/**/*.ts",
38 | "next-env.d.ts"
39 | ],
40 | "exclude": [
41 | "node_modules",
42 | "build"
43 | ]
44 | }
45 |
--------------------------------------------------------------------------------
/tsconfig.stdio.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "module": "NodeNext",
5 | "moduleResolution": "NodeNext",
6 | "noEmit": false,
7 | "plugins": []
8 | },
9 | "include": [
10 | "src/server.ts",
11 | "src/index.ts"
12 | // Add any other specific files for the stdio server here if they arise
13 | ],
14 | "exclude": [
15 | "node_modules",
16 | "build",
17 | "src/app", // Exclude Next.js app directory
18 | "next-env.d.ts", // Exclude Next.js type declarations file
19 | "src/**/*.test.ts" // Assuming tests are run separately and not part of stdio build output
20 | ]
21 | }
--------------------------------------------------------------------------------