api2ai 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,56 +1,29 @@
1
1
 
2
2
  <p align="center">
3
- <img width="600px" src="https://i.imgur.com/TTJBLxo.png" />
3
+ <img src="https://i.imgur.com/6CKuUBa.png" /><br />
4
+ <a href="https://npmjs.org/package/grab-url"><img alt="NPM Version" src="https://img.shields.io/npm/v/grab-url" /></a><a href="https://github.com/vtempest/GRAB-URL/discussions"><img alt="GitHub Discussions"
5
+ src="https://img.shields.io/github/discussions/vtempest/GRAB-URL" /></a><a href="https://github.blog/developer-skills/github/beginners-guide-to-github-creating-a-pull-request/"><img src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg" alt="PRs Welcome"/></a>
4
6
  </p>
5
7
 
6
- <!-- template-git-repo:badges:start -->
7
- <p align="center">
8
- <a href="https://1computer.online/docs/packages/api2ai-mcp-generator"><img src="https://img.shields.io/badge/Docs-blue?logo=ReadTheDocs&logoColor=white" alt="Documentation" /></a>
9
- <br />
10
- <a href="https://github.com/OpenSourceAGI/dev-tools-starter-agent/stargazers"><img src="https://img.shields.io/github/stars/OpenSourceAGI/dev-tools-starter-agent" alt="GitHub Stars" /></a>
11
- <a href="https://www.npmjs.com/package/api2ai"><img src="https://img.shields.io/npm/dm/api2ai.svg" alt="NPM Monthly Downloads" /></a>
12
- <a href="https://www.npmjs.com/package/api2ai"><img src="https://img.shields.io/npm/v/api2ai.svg" alt="npm version" /></a>
13
- <a href="https://www.npmjs.com/package/api2ai"><img src="https://img.shields.io/npm/dt/api2ai.svg" alt="NPM Total Downloads" /></a>
14
- <a href="https://www.npmjs.com/package/api2ai"><img src="https://img.shields.io/npm/types/api2ai" alt="TypeScript types" /></a>
15
- <a href="https://packagephobia.com/result?p=api2ai"><img src="https://packagephobia.com/badge?p=api2ai" alt="Install size" /></a>
16
- <br />
17
- <a href="https://github.com/OpenSourceAGI/dev-tools-starter-agent/issues"><img src="https://img.shields.io/github/issues/OpenSourceAGI/dev-tools-starter-agent?logo=github" alt="GitHub Issues" /></a>
18
- <a href="https://github.com/OpenSourceAGI/dev-tools-starter-agent/pulls"><img src="https://img.shields.io/github/issues-pr/OpenSourceAGI/dev-tools-starter-agent?logo=github&label=PRs" alt="Open Pull Requests" /></a>
19
- <a href="https://github.com/OpenSourceAGI/dev-tools-starter-agent/pulls?q=is%3Apr+is%3Aclosed"><img src="https://img.shields.io/github/issues-pr-closed/OpenSourceAGI/dev-tools-starter-agent?logo=github&label=PRs%20merged&color=8957e5" alt="Merged Pull Requests" /></a>
20
- <a href="https://github.com/OpenSourceAGI/dev-tools-starter-agent/discussions"><img src="https://img.shields.io/github/discussions/OpenSourceAGI/dev-tools-starter-agent" alt="GitHub Discussions" /></a>
21
- <a href="https://github.com/OpenSourceAGI/dev-tools-starter-agent/commits/master/"><img src="https://img.shields.io/github/last-commit/OpenSourceAGI/dev-tools-starter-agent.svg" alt="GitHub last commit" /></a>
22
- <br />
23
- <a href="https://stackblitz.com/github/OpenSourceAGI/dev-tools-starter-agent/tree/master/packages/api2ai-mcp-generator"><img height="20px" src="https://developer.stackblitz.com/img/open_in_stackblitz.svg" alt="Open in StackBlitz" /></a>
24
- <img src="https://img.shields.io/badge/Bun-14151A?logo=bun&logoColor=white" alt="Bun" /> <img src="https://img.shields.io/badge/TypeScript-3178C6?logo=typescript&logoColor=white" alt="TypeScript" /> <img src="https://img.shields.io/badge/Next.js-black?logo=nextdotjs&logoColor=white" alt="Next.js" /> <img src="https://img.shields.io/badge/React-20232A?logo=react&logoColor=white" alt="React" /> <img src="https://img.shields.io/badge/Tailwind%20CSS-06B6D4?logo=tailwindcss&logoColor=white" alt="Tailwind CSS" /> <img src="https://img.shields.io/badge/shadcn%2Fui-000000?logo=shadcnui&logoColor=white" alt="shadcn/ui" /> <img src="https://img.shields.io/badge/Drizzle%20ORM-C5F74F?logo=drizzle&logoColor=white" alt="Drizzle ORM" /> <img src="https://img.shields.io/badge/better--auth-000000" alt="better-auth" /> <img src="https://img.shields.io/badge/Stripe-635BFF?logo=stripe&logoColor=white" alt="Stripe" /> <img src="https://img.shields.io/badge/Vercel%20AI%20SDK-black?logo=vercel&logoColor=white" alt="Vercel AI SDK" /> <img src="https://img.shields.io/badge/Zod-3E67B1?logo=zod&logoColor=white" alt="Zod" /> <img src="https://img.shields.io/badge/Fumadocs-000000" alt="Fumadocs" /> <img src="https://img.shields.io/badge/Vite-646CFF?logo=vite&logoColor=white" alt="Vite" /> <img src="https://img.shields.io/badge/Vitest-6E9F18?logo=vitest&logoColor=white" alt="Vitest" />
25
- </p>
26
- <!-- template-git-repo:badges:end -->
27
-
28
- <!-- skills:install:start -->
29
- **🤖 Agent skill** — `npx skills@latest add https://github.com/OpenSourceAGI/dev-tools-starter-agent --skill api2ai` ([what it covers](../../skills/api2ai/SKILL.md))
30
- <!-- skills:install:end -->
31
-
32
- <h3 align="center">
33
- <a href="https://api-2-ai.vercel.app/"> 🌐 Live Site </a> &nbsp;|&nbsp;
34
- <a href="https://github.com/vtempest/GRAB-URL/tree/master/api2ai/example-petstore"> 🎯 Example MCP Server </a>
35
- </h3>
36
8
 
9
+ # API2AI: OpenAPI to MCP-Use Server
37
10
 
11
+ <a href="https://github.com/OpenSourceAGI/GRAB-URL/tree/master/examples/openapi-mcp-docs"> 🎯 Example MCP Server </a>
38
12
 
39
13
 
40
- # API2AI: OpenAPI to MCP-Use Server
41
-
42
14
  Generate production-ready MCP servers from any OpenAPI specification using the highly-used and convenient [mcp-use](https://mcp-use.com) framework (8k+ GitHub stars).
43
15
 
44
16
  OpenAPI specs are easy to write and organize your code and have [100s of tools available](https://openapi.tools) such as the [OpenAPI Builder web UI](https://www.apibldr.com).
45
17
 
46
- Try it in the browser at **[api-2-ai.vercel.app](https://api-2-ai.vercel.app/)** — the hosted site lets you design and validate OpenAPI specs visually, browse the docs, and see generated-server examples without installing anything.
47
18
 
48
19
  ## Features
49
20
 
50
21
  - 🚀 **Modern Framework** - Uses mcp-use for clean, maintainable code
51
- - 🔍 **Built-in Inspector** - Test tools immediately at `/inspector`
52
- - 📡 **Multiple Transports** - HTTP, SSE, and Streamable HTTP support
53
- - 🎨 **UI Widgets** - Compatible with ChatGPT Apps SDK and MCP-UI
22
+ - 🆕 **mcp-use 2.x** - Generated servers target mcp-use `^2.7.3` and zod 4
23
+ - 🔍 **Inspector** - `npm run dev` serves it at `/mcp/inspector`
24
+ - 📡 **Streamable HTTP** - One `/mcp` endpoint for every client
25
+ - 🏷️ **Tool Annotations** - `readOnlyHint` / `destructiveHint` / `idempotentHint` from the HTTP method
26
+ - 🔗 **`$ref`, `allOf`, nullable** - Local refs resolved, cycles cut, OpenAPI 3.0 and 3.1 nullability
54
27
  - 🔐 **Auth Support** - Bearer tokens, API keys, custom headers
55
28
  - ✨ **Zod Schemas** - Type-safe parameter validation
56
29
  - 🛡️ **Security Hardening** - Risk classification, policy enforcement, HTTP guardrails
@@ -68,26 +41,28 @@ npx api2ai \
68
41
  # Install and run
69
42
  cd petstore-mcp
70
43
  npm install
71
- npm start
44
+ npm start # MCP endpoint at http://localhost:3000/mcp
45
+ npm run dev # hot reload + Inspector at http://localhost:3000/mcp/inspector
72
46
  ```
73
47
 
74
- Open http://localhost:3000/inspector to test your tools!
48
+ Generated servers need **Node 22.22.2+** (mcp-use 2.x's engine floor). The generator itself runs on Node 18+.
75
49
 
76
50
  ## Usage
77
51
 
78
52
  ### CLI
79
53
 
80
54
  ```bash
81
- node generate-mcp-use-server.js <openapi-spec> [output-folder] [options]
55
+ npx api2ai <openapi-spec> [output-folder] [options]
82
56
 
83
57
  Options:
84
58
  --name <name> Server name (default: api-mcp-server)
85
59
  --base-url <url> Override API base URL
86
60
  --port <port> Server port (default: 3000)
87
- --allow-mutations Enable POST/PUT/PATCH/DELETE tools by default
61
+ --allow-mutations Enable medium-risk POST/PUT/PATCH/DELETE tools by default
88
62
  --include-tags <tags> Only include tools with these tags (comma-separated)
89
63
  --exclude-tags <tags> Exclude tools with these tags (comma-separated)
90
- --approve-writes Disable approval requirement for restricted tools
64
+ --exclude-ops <ids> Exclude these operationIds (comma-separated)
65
+ --approve-writes Write REQUIRE_APPROVALS=false into the generated .env
91
66
  --help Show help
92
67
  ```
93
68
 
@@ -95,32 +70,32 @@ Options:
95
70
 
96
71
  ```bash
97
72
  # From remote URL
98
- node generate-mcp-use-server.js \
73
+ npx api2ai \
99
74
  https://api.example.com/openapi.json \
100
75
  ./my-server \
101
76
  --name my-api
102
77
 
103
78
  # From local file
104
- node generate-mcp-use-server.js \
79
+ npx api2ai \
105
80
  ./specs/my-api.yaml \
106
81
  ./my-mcp-server \
107
82
  --port 8080
108
83
 
109
84
  # With custom base URL
110
- node generate-mcp-use-server.js \
85
+ npx api2ai \
111
86
  ./petstore.json \
112
87
  ./petstore \
113
88
  --base-url https://petstore.example.com/v3
114
89
 
115
90
  # Include only read-only tools tagged "public"
116
- node generate-mcp-use-server.js \
91
+ npx api2ai \
117
92
  ./api.json \
118
93
  ./readonly-server \
119
94
  --include-tags public \
120
95
  --exclude-tags admin,internal
121
96
 
122
97
  # Enable writes (mutations) explicitly
123
- node generate-mcp-use-server.js \
98
+ npx api2ai \
124
99
  ./api.json \
125
100
  ./full-server \
126
101
  --allow-mutations \
@@ -130,30 +105,33 @@ node generate-mcp-use-server.js \
130
105
  ### Programmatic Usage
131
106
 
132
107
  ```javascript
133
- import { generateMcpServer, extractTools, loadOpenApiSpec } from './generate-mcp-use-server.js';
108
+ import { generateMcpServer, renderMcpServer, extractTools, loadOpenApiSpec } from "api2ai";
134
109
 
135
110
  // Generate complete server
136
111
  const result = await generateMcpServer(
137
- 'https://api.example.com/openapi.json',
138
- './output-folder',
112
+ "https://api.example.com/openapi.json",
113
+ "./output-folder",
139
114
  {
140
- serverName: 'my-api',
141
- baseUrl: 'https://api.example.com/v1',
115
+ serverName: "my-api",
116
+ baseUrl: "https://api.example.com/v1",
142
117
  port: 3000,
143
118
  allowMutations: false, // block POST/PUT/PATCH/DELETE by default
144
- includeTags: ['public'], // only include tools tagged "public"
145
- excludeTags: ['admin'], // exclude tools tagged "admin"
119
+ includeTags: ["public"], // only include tools tagged "public"
120
+ excludeTags: ["admin"], // exclude tools tagged "admin"
146
121
  }
147
122
  );
148
123
 
149
124
  console.log(`Generated ${result.toolCount} tools`);
150
125
 
151
126
  // Or just extract tools for custom processing
152
- const spec = await loadOpenApiSpec('./my-spec.json');
127
+ const spec = await loadOpenApiSpec("./my-spec.json");
153
128
  const tools = extractTools(spec, {
154
- filterFn: (tool) => tool.riskLevel === 'low', // only safe read-only tools
155
- excludeOperationIds: ['deleteUser'],
129
+ filterFn: (tool) => tool.riskLevel === "low", // only safe read-only tools
130
+ excludeOperationIds: ["deleteUser"],
156
131
  });
132
+
133
+ // Or render every file in memory without writing to disk
134
+ const { files } = renderMcpServer(spec, { serverName: "my-api" });
157
135
  ```
158
136
 
159
137
  ## Security
@@ -189,9 +167,9 @@ The generated HTTP client enforces these on every request:
189
167
  - **Response size cap** — configurable via `MAX_RESPONSE_BYTES` (default 10 MB)
190
168
  - **No redirects** — `redirect: 'error'` prevents host-pivot attacks
191
169
  - **Credential header protection** — tool arguments cannot override `Authorization`, `Cookie`, `X-API-Key`, or other credential headers; env-configured auth always wins
192
- - **Host allowlist** — `ALLOWED_API_HOSTS` restricts outbound calls to specific hostnames
170
+ - **Host allowlist** — only the spec's API host may be called unless `ALLOWED_API_HOSTS` says otherwise, so a tampered `API_BASE_URL` can't send your credentials elsewhere
193
171
 
194
- > **Inspector note**: The built-in inspector at `/inspector` exposes all registered tools. In production, restrict access using a reverse proxy or firewall rule.
172
+ > **Inspector note**: the Inspector (`npm run dev`, or `npm run start:inspector`) exposes all registered tools. Don't run it on a public interface.
195
173
 
196
174
  ## Generated Output
197
175
 
@@ -215,22 +193,21 @@ my-mcp-server/
215
193
 
216
194
  | Endpoint | Description |
217
195
  |----------|-------------|
218
- | `GET /inspector` | Interactive tool testing UI |
219
- | `POST /mcp` | MCP protocol endpoint |
220
- | `GET /sse` | Server-Sent Events endpoint |
221
- | `GET /health` | Health check |
196
+ | `POST /mcp` | MCP endpoint (Streamable HTTP) |
197
+ | `GET /mcp` | Landing page with client setup instructions |
198
+ | `/mcp/inspector` | Interactive tool testing UI (`npm run dev` only) |
222
199
 
223
200
  ### Environment Variables
224
201
 
225
202
  | Variable | Description | Default |
226
203
  |----------|-------------|---------|
227
204
  | `PORT` | Server port | `3000` |
228
- | `NODE_ENV` | `development` / `production` | `development` |
205
+ | `HOST` | Bind address (`0.0.0.0` in containers) | `127.0.0.1` |
229
206
  | `API_BASE_URL` | Base URL for API calls | From spec |
230
207
  | `API_KEY` | Bearer token auth | — |
231
208
  | `API_AUTH_HEADER` | Custom header (`Name:value`) | — |
232
- | `MCP_URL` | Public URL for widgets | — |
233
- | `ALLOWED_ORIGINS` | CORS origins (production) | — |
209
+ | `MCP_URL` | Public URL behind a proxy (its host is allowed) | — |
210
+ | `ALLOWED_ORIGINS` | Browser origins allowed to call `/mcp` | — |
234
211
  | `ALLOW_RESTRICTED_TOOLS` | Allow medium/high-risk tools | `false` |
235
212
  | `REQUIRE_APPROVALS` | Require approval for restricted tools | `true` |
236
213
  | `ALLOWED_API_HOSTS` | Comma-separated allowed API hostnames | (spec's host) |
@@ -249,9 +226,11 @@ my-mcp-server/
249
226
  }
250
227
  ```
251
228
 
252
- ### Connect to ChatGPT
229
+ ### Connect to Claude Code
253
230
 
254
- The generated server supports the OpenAI Apps SDK out of the box.
231
+ ```bash
232
+ claude mcp add --transport http my-api http://localhost:3000/mcp
233
+ ```
255
234
 
256
235
  ## Advanced Options
257
236
 
@@ -259,7 +238,7 @@ The generated server supports the OpenAI Apps SDK out of the box.
259
238
 
260
239
  ```javascript
261
240
  const result = await generateMcpServer(specUrl, outputDir, {
262
- filterFn: (tool) => tool.riskLevel === 'low',
241
+ filterFn: (tool) => tool.riskLevel === "low",
263
242
  });
264
243
  ```
265
244
 
@@ -267,7 +246,7 @@ const result = await generateMcpServer(specUrl, outputDir, {
267
246
 
268
247
  ```javascript
269
248
  const result = await generateMcpServer(specUrl, outputDir, {
270
- filterFn: (tool) => ['get', 'post'].includes(tool.method),
249
+ filterFn: (tool) => ["get", "post"].includes(tool.method),
271
250
  });
272
251
  ```
273
252
 
@@ -276,9 +255,9 @@ const result = await generateMcpServer(specUrl, outputDir, {
276
255
  ```javascript
277
256
  const result = await generateMcpServer(specUrl, outputDir, {
278
257
  excludeOperationIds: [
279
- 'deleteUser',
280
- 'deleteAllData',
281
- 'adminReset',
258
+ "deleteUser",
259
+ "deleteAllData",
260
+ "adminReset",
282
261
  ],
283
262
  });
284
263
  ```
@@ -287,7 +266,7 @@ const result = await generateMcpServer(specUrl, outputDir, {
287
266
 
288
267
  ```javascript
289
268
  const result = await generateMcpServer(specUrl, outputDir, {
290
- filterFn: (tool) => tool.pathTemplate.startsWith('/api/v2/'),
269
+ filterFn: (tool) => tool.pathTemplate.startsWith("/api/v2/"),
291
270
  });
292
271
  ```
293
272
 
@@ -295,11 +274,11 @@ const result = await generateMcpServer(specUrl, outputDir, {
295
274
 
296
275
  ```javascript
297
276
  const result = await generateMcpServer(specUrl, outputDir, {
298
- excludeOperationIds: ['deleteUser'],
277
+ excludeOperationIds: ["deleteUser"],
299
278
  allowMutations: false,
300
- filterFn: (tool) =>
301
- tool.riskLevel === 'low' &&
302
- tool.pathTemplate.includes('/public/'),
279
+ filterFn: (tool) =>
280
+ tool.riskLevel === "low" &&
281
+ tool.pathTemplate.includes("/public/"),
303
282
  });
304
283
  ```
305
284
 
@@ -309,7 +288,6 @@ const result = await generateMcpServer(specUrl, outputDir, {
309
288
  |---------|---------------|---------|
310
289
  | Code needed | ~50 lines | ~200+ lines |
311
290
  | Inspector | ✅ Built-in | ❌ Manual |
312
- | UI Widgets | ✅ Supported | ❌ Manual |
313
291
  | Zod validation | ✅ Generated | ❌ Manual |
314
292
  | Authentication | ✅ Configured | ❌ Manual |
315
293
  | Risk classification | ✅ Automatic | ❌ Manual |
@@ -317,8 +295,24 @@ const result = await generateMcpServer(specUrl, outputDir, {
317
295
  | HTTP hardening | ✅ Built-in | ❌ Manual |
318
296
  | Production ready | ✅ Yes | ⚠️ Requires work |
319
297
 
320
- ---
298
+ ## Development
299
+
300
+ ```
301
+ src/
302
+ ├── cli.js # the `api2ai` command
303
+ ├── index.js # public API
304
+ ├── generate.js # render + write a server
305
+ ├── versions.js # mcp-use / zod versions written into generated servers
306
+ ├── spec/ # load spec, OpenAPI → Zod, risk classification, tool extraction
307
+ └── templates/ # one module per generated file
308
+ ```
309
+
310
+ ```bash
311
+ node src/cli.js ./petstore.json ./out
312
+ # tests live in the repo's single Vitest suite
313
+ cd ../grab-url && npx vitest run test/api2ai.test.ts
314
+ ```
321
315
 
322
- [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
316
+ ## License
323
317
 
324
- Please star this repo for updates! 🌟
318
+ MIT
package/package.json CHANGED
@@ -1,247 +1,35 @@
1
1
  {
2
2
  "name": "api2ai",
3
- "version": "1.0.26",
4
- "description": "Generate production-ready MCP servers from any OpenAPI specification using the highly-used and convenient [mcp-use](https://mcp-use.com) framework",
5
- "license": "rights.institute/prosper",
6
- "author": "vtempest",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/OpenSourceAGI/dev-tools-starter-agent.git",
10
- "directory": "packages/api2ai-mcp-generator"
3
+ "version": "1.0.28",
4
+ "description": "Generate a production-ready MCP server (mcp-use framework) from any OpenAPI specification.",
5
+ "type": "module",
6
+ "bin": {
7
+ "api2ai": "./src/cli.js"
11
8
  },
12
- "homepage": "https://github.com/OpenSourceAGI/dev-tools-starter-agent/tree/master/packages/api2ai-mcp-generator",
13
- "keywords": [
14
- "mcp",
15
- "mcp-server",
16
- "model-context-protocol",
17
- "openapi",
18
- "api",
19
- "ai",
20
- "code-generator",
21
- "zod"
22
- ],
9
+ "main": "./src/index.js",
23
10
  "exports": {
24
- ".": {
25
- "types": "./dist/index.d.ts",
26
- "import": "./dist/index.mjs",
27
- "require": "./dist/index.js"
28
- }
11
+ ".": "./src/index.js",
12
+ "./cli": "./src/cli.js",
13
+ "./package.json": "./package.json"
29
14
  },
30
- "main": "dist/index.js",
31
- "module": "dist/index.mjs",
32
- "types": "dist/index.d.ts",
33
- "files": [
34
- "dist"
35
- ],
36
- "scripts": {
37
- "build": "next build",
38
- "db:create": "npm create cloud-db",
39
- "db:generate": "drizzle-kit generate",
40
- "db:push": "drizzle-kit push",
41
- "db:studio": "concurrently \"drizzle-kit studio\" \"wait-on https://local.drizzle.studio && opener https://local.drizzle.studio\"",
42
- "dev": "concurrently \"next dev\" \"wait-on http://localhost:3000 && opener http://localhost:3000\"",
43
- "docs:check": "fumadocs check",
44
- "docs:generate": "fumadocs-mdx",
45
- "make": "concurrently \"next build && next start \" \"wait-on http://localhost:3000 && opener http://localhost:3000\"",
46
- "start": "next start",
47
- "test": "vitest run",
48
- "test:watch": "vitest",
49
- "coverage": "vitest run --coverage"
15
+ "optionalDependencies": {
16
+ "js-yaml": "^4.1.1"
50
17
  },
51
- "dependencies": {
52
- "@ai-sdk/react": "3.0.3",
53
- "@aws-sdk/client-rds-data": "latest",
54
- "@better-auth/core": "latest",
55
- "@better-auth/stripe": "^1.4.7",
56
- "@cloudflare/workers-types": "latest",
57
- "@electric-sql/pglite": "latest",
58
- "@emotion/is-prop-valid": "latest",
59
- "@fumadocs/mdx-remote": "^1.4.3",
60
- "@langchain/core": "^1.1.5",
61
- "@langchain/groq": "^1.0.2",
62
- "@langchain/openai": "^1.2.0",
63
- "@libsql/client": "^0.15.15",
64
- "@libsql/client-wasm": "latest",
65
- "@lynx-js/react": "latest",
66
- "@mixedbread/sdk": "latest",
67
- "@neondatabase/serverless": "latest",
68
- "@op-engineering/op-sqlite": "latest",
69
- "@opentelemetry/api": "latest",
70
- "@orama/core": "latest",
71
- "@planetscale/database": "latest",
72
- "@prisma/client": "latest",
73
- "@radix-ui/react-accordion": "1.2.12",
74
- "@radix-ui/react-alert-dialog": "1.1.15",
75
- "@radix-ui/react-aspect-ratio": "1.1.8",
76
- "@radix-ui/react-avatar": "^1.1.11",
77
- "@radix-ui/react-checkbox": "1.3.3",
78
- "@radix-ui/react-collapsible": "^1.1.12",
79
- "@radix-ui/react-context-menu": "2.2.16",
80
- "@radix-ui/react-dialog": "^1.1.15",
81
- "@radix-ui/react-dropdown-menu": "^2.1.16",
82
- "@radix-ui/react-hover-card": "1.1.15",
83
- "@radix-ui/react-label": "2.1.8",
84
- "@radix-ui/react-menubar": "1.1.16",
85
- "@radix-ui/react-navigation-menu": "1.2.14",
86
- "@radix-ui/react-popover": "1.1.15",
87
- "@radix-ui/react-presence": "1.1.5",
88
- "@radix-ui/react-progress": "1.1.8",
89
- "@radix-ui/react-radio-group": "^1.3.8",
90
- "@radix-ui/react-scroll-area": "1.2.10",
91
- "@radix-ui/react-select": "2.2.6",
92
- "@radix-ui/react-separator": "^1.1.8",
93
- "@radix-ui/react-slider": "1.3.6",
94
- "@radix-ui/react-slot": "^1.2.4",
95
- "@radix-ui/react-switch": "1.2.6",
96
- "@radix-ui/react-tabs": "1.1.13",
97
- "@radix-ui/react-toast": "1.2.15",
98
- "@radix-ui/react-toggle": "1.1.10",
99
- "@radix-ui/react-toggle-group": "1.1.11",
100
- "@radix-ui/react-tooltip": "^1.2.8",
101
- "@react-email/render": "latest",
102
- "@react-three/drei": "^10.7.7",
103
- "@react-three/fiber": "^9.4.2",
104
- "@scalar/api-client-react": "latest",
105
- "@scalar/api-reference": "^1.40.5",
106
- "@scalar/api-reference-react": "^0.8.11",
107
- "@shikijs/rehype": "^3.20.0",
108
- "@shikijs/transformers": "^3.20.0",
109
- "@silevis/reactgrid": "^4.1.17",
110
- "@t3-oss/env-nextjs": "0.13.10",
111
- "@tabler/icons-react": "^3.36.0",
112
- "@tanstack/react-router": "latest",
113
- "@tanstack/react-start": "latest",
114
- "@tidbcloud/serverless": "latest",
115
- "@types/better-sqlite3": "latest",
116
- "@types/dompurify": "^3.2.0",
117
- "@types/js-yaml": "^4.0.9",
118
- "@types/marked": "^6.0.0",
119
- "@types/pg": "latest",
120
- "@types/sql.js": "latest",
121
- "@upstash/redis": "latest",
122
- "@vercel/analytics": "1.6.1",
123
- "@vercel/postgres": "latest",
124
- "@xata.io/client": "latest",
125
- "ai": "6.0.3",
126
- "algoliasearch": "latest",
127
- "arktype": "latest",
128
- "autoprefixer": "^10.4.22",
129
- "axios": "^1.13.2",
130
- "better-auth": "^1.4.7",
131
- "better-sqlite3": "latest",
132
- "bun-types": "latest",
133
- "canvas": "latest",
134
- "class-variance-authority": "^0.7.1",
135
- "cli-highlight": "^2.1.11",
136
- "clsx": "^2.1.1",
137
- "cmdk": "^1.1.1",
138
- "date-fns": "4.1.0",
139
- "dompurify": "^3.3.1",
140
- "dotenv": "^17.2.3",
141
- "drizzle-orm": "^0.45.1",
142
- "embla-carousel-react": "8.6.0",
143
- "ethers": "^6.16.0",
144
- "expo": "latest",
145
- "expo-asset": "latest",
146
- "expo-file-system": "latest",
147
- "expo-gl": "latest",
148
- "expo-sqlite": "latest",
149
- "feed": "^5.1.0",
150
- "fumadocs-core": "^16.2.5",
151
- "fumadocs-mdx": "^14.1.1",
152
- "fumadocs-openapi": "^10.1.4",
153
- "fumadocs-twoslash": "^3.1.10",
154
- "fumadocs-typescript": "^4.0.14",
155
- "fumadocs-ui": "^16.2.5",
156
- "gel": "latest",
157
- "grab-url": "^1.0.15",
158
- "hast-util-to-jsx-runtime": "2.3.6",
159
- "highlight.js": "^11.11.1",
160
- "jiti": "latest",
161
- "js-yaml": "^4.1.1",
162
- "jszip": "^3.10.1",
163
- "katex": "^0.16.27",
164
- "knex": "latest",
165
- "kysely": "latest",
166
- "langchain": "^1.2.0",
167
- "less": "latest",
168
- "lightningcss": "latest",
169
- "linkedom": "^0.18.12",
170
- "lucide-react": "^0.561.0",
171
- "marked": "^17.0.1",
172
- "mermaid": "^11.12.2",
173
- "mongodb": "latest",
174
- "motion": "^12.23.26",
175
- "mysql2": "latest",
176
- "next": "16.0.10",
177
- "next-themes": "^0.4.6",
178
- "pg": "latest",
179
- "pinets": "^0.5.0",
180
- "postgres": "latest",
181
- "prisma": "latest",
182
- "react": "19.2.3",
183
- "react-day-picker": "9.12.0",
184
- "react-dom": "19.2.3",
185
- "react-hook-form": "^7.68.0",
186
- "react-is": "^19.2.3",
187
- "react-native": "latest",
188
- "react-resizable-panels": "^3.0.6",
189
- "react-router": "latest",
190
- "rehype-katex": "^7.0.1",
191
- "remark": "15.0.1",
192
- "remark-gfm": "4.0.1",
193
- "remark-math": "^6.0.0",
194
- "remark-rehype": "11.1.2",
195
- "resend": "^6.6.0",
196
- "sass": "latest",
197
- "sass-embedded": "latest",
198
- "simplex-noise": "^4.0.3",
199
- "siwe": "^3.0.0",
200
- "solid-js": "latest",
201
- "sonner": "^2.0.7",
202
- "sql.js": "latest",
203
- "sqlite3": "latest",
204
- "stripe": "^20.0.0",
205
- "stylus": "latest",
206
- "sugarss": "latest",
207
- "tailwind-merge": "^3.4.0",
208
- "tailwindcss-animate": "^1.0.7",
209
- "tavily": "^1.0.2",
210
- "terser": "^5.44.1",
211
- "three": "^0.182.0",
212
- "three-globe": "^2.45.0",
213
- "tsx": "latest",
214
- "unist-util-visit": "5.0.0",
215
- "valibot": "latest",
216
- "vaul": "^1.1.2",
217
- "viem": "^2.42.0",
218
- "vitest": "latest",
219
- "waku": "latest",
220
- "yaml": "latest",
221
- "zod": "4.1.13"
18
+ "engines": {
19
+ "node": ">=18.0.0"
222
20
  },
223
- "devDependencies": {
224
- "@fumadocs/cli": "^1.1.0",
225
- "@tailwindcss/postcss": "^4.1.18",
226
- "@types/node": "^25.0.2",
227
- "@types/react": "^19.2.7",
228
- "@types/react-dom": "^19.2.3",
229
- "@types/three": "^0.182.0",
230
- "@vitest/coverage-v8": "^4.1.0",
231
- "concurrently": "^9.2.1",
232
- "drizzle-kit": "^0.31.8",
233
- "opener": "^1.5.2",
234
- "postcss": "^8.5.6",
235
- "tailwindcss": "^4.1.18",
236
- "tw-animate-css": "1.4.0",
237
- "typescript": "^5.9.3",
238
- "vite": "^7.3.0",
239
- "vite-plugin-dts": "^4.5.4",
240
- "vitest": "^4.1.0",
241
- "wait-on": "^9.0.3"
21
+ "license": "MIT",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/OpenSourceAGI/GRAB-URL.git",
25
+ "directory": "packages/api2ai"
26
+ },
27
+ "bugs": {
28
+ "url": "https://github.com/OpenSourceAGI/GRAB-URL/issues"
242
29
  },
243
- "data": "dist/index.d.ts",
244
- "trustedDependencies": [
245
- "pg-native"
30
+ "homepage": "https://github.com/OpenSourceAGI/GRAB-URL/tree/master/packages/api2ai#readme",
31
+ "files": [
32
+ "src",
33
+ "README.md"
246
34
  ]
247
35
  }