api2ai 1.0.2 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +159 -24
- package/package.json +239 -22
- package/bun.lock +0 -17
- package/example-petstore/.env.example +0 -14
- package/example-petstore/README.md +0 -145
- package/example-petstore/bun.lock +0 -387
- package/example-petstore/package.json +0 -19
- package/example-petstore/src/http-client.js +0 -120
- package/example-petstore/src/index.js +0 -493
- package/example-petstore/src/tools-config.js +0 -247
- package/example.js +0 -164
- package/generate-mcp-use-server.js +0 -832
package/README.md
CHANGED
|
@@ -1,6 +1,49 @@
|
|
|
1
|
+
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img width="600px" src="https://i.imgur.com/TTJBLxo.png" />
|
|
4
|
+
</p>
|
|
5
|
+
|
|
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> |
|
|
34
|
+
<a href="https://github.com/vtempest/GRAB-URL/tree/master/api2ai/example-petstore"> 🎯 Example MCP Server </a>
|
|
35
|
+
</h3>
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
|
|
1
40
|
# API2AI: OpenAPI to MCP-Use Server
|
|
2
41
|
|
|
3
|
-
Generate production-ready MCP servers from any OpenAPI specification using the [mcp-use](https://mcp-use.com) framework.
|
|
42
|
+
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
|
+
|
|
44
|
+
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
|
+
|
|
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.
|
|
4
47
|
|
|
5
48
|
## Features
|
|
6
49
|
|
|
@@ -10,13 +53,14 @@ Generate production-ready MCP servers from any OpenAPI specification using the [
|
|
|
10
53
|
- 🎨 **UI Widgets** - Compatible with ChatGPT Apps SDK and MCP-UI
|
|
11
54
|
- 🔐 **Auth Support** - Bearer tokens, API keys, custom headers
|
|
12
55
|
- ✨ **Zod Schemas** - Type-safe parameter validation
|
|
56
|
+
- 🛡️ **Security Hardening** - Risk classification, policy enforcement, HTTP guardrails
|
|
13
57
|
- 🐳 **Production Ready** - Docker, PM2, and Kubernetes ready
|
|
14
58
|
|
|
15
59
|
## Quick Start
|
|
16
60
|
|
|
17
61
|
```bash
|
|
18
62
|
# Generate a server from the Petstore API
|
|
19
|
-
|
|
63
|
+
npx api2ai \
|
|
20
64
|
https://petstore3.swagger.io/api/v3/openapi.json \
|
|
21
65
|
./petstore-mcp \
|
|
22
66
|
--name petstore-api
|
|
@@ -37,10 +81,14 @@ Open http://localhost:3000/inspector to test your tools!
|
|
|
37
81
|
node generate-mcp-use-server.js <openapi-spec> [output-folder] [options]
|
|
38
82
|
|
|
39
83
|
Options:
|
|
40
|
-
--name <name>
|
|
41
|
-
--base-url <url>
|
|
42
|
-
--port <port>
|
|
43
|
-
--
|
|
84
|
+
--name <name> Server name (default: api-mcp-server)
|
|
85
|
+
--base-url <url> Override API base URL
|
|
86
|
+
--port <port> Server port (default: 3000)
|
|
87
|
+
--allow-mutations Enable POST/PUT/PATCH/DELETE tools by default
|
|
88
|
+
--include-tags <tags> Only include tools with these tags (comma-separated)
|
|
89
|
+
--exclude-tags <tags> Exclude tools with these tags (comma-separated)
|
|
90
|
+
--approve-writes Disable approval requirement for restricted tools
|
|
91
|
+
--help Show help
|
|
44
92
|
```
|
|
45
93
|
|
|
46
94
|
### Examples
|
|
@@ -63,6 +111,20 @@ node generate-mcp-use-server.js \
|
|
|
63
111
|
./petstore.json \
|
|
64
112
|
./petstore \
|
|
65
113
|
--base-url https://petstore.example.com/v3
|
|
114
|
+
|
|
115
|
+
# Include only read-only tools tagged "public"
|
|
116
|
+
node generate-mcp-use-server.js \
|
|
117
|
+
./api.json \
|
|
118
|
+
./readonly-server \
|
|
119
|
+
--include-tags public \
|
|
120
|
+
--exclude-tags admin,internal
|
|
121
|
+
|
|
122
|
+
# Enable writes (mutations) explicitly
|
|
123
|
+
node generate-mcp-use-server.js \
|
|
124
|
+
./api.json \
|
|
125
|
+
./full-server \
|
|
126
|
+
--allow-mutations \
|
|
127
|
+
--approve-writes
|
|
66
128
|
```
|
|
67
129
|
|
|
68
130
|
### Programmatic Usage
|
|
@@ -78,6 +140,9 @@ const result = await generateMcpServer(
|
|
|
78
140
|
serverName: 'my-api',
|
|
79
141
|
baseUrl: 'https://api.example.com/v1',
|
|
80
142
|
port: 3000,
|
|
143
|
+
allowMutations: false, // block POST/PUT/PATCH/DELETE by default
|
|
144
|
+
includeTags: ['public'], // only include tools tagged "public"
|
|
145
|
+
excludeTags: ['admin'], // exclude tools tagged "admin"
|
|
81
146
|
}
|
|
82
147
|
);
|
|
83
148
|
|
|
@@ -86,11 +151,48 @@ console.log(`Generated ${result.toolCount} tools`);
|
|
|
86
151
|
// Or just extract tools for custom processing
|
|
87
152
|
const spec = await loadOpenApiSpec('./my-spec.json');
|
|
88
153
|
const tools = extractTools(spec, {
|
|
89
|
-
filterFn: (tool) => tool.
|
|
90
|
-
excludeOperationIds: ['deleteUser'],
|
|
154
|
+
filterFn: (tool) => tool.riskLevel === 'low', // only safe read-only tools
|
|
155
|
+
excludeOperationIds: ['deleteUser'],
|
|
91
156
|
});
|
|
92
157
|
```
|
|
93
158
|
|
|
159
|
+
## Security
|
|
160
|
+
|
|
161
|
+
The generator enforces a three-layer security model in every generated server.
|
|
162
|
+
|
|
163
|
+
### Layer 1 — Generation-time risk classification
|
|
164
|
+
|
|
165
|
+
Every tool is classified during generation and the result is baked into `src/tools-config.js`:
|
|
166
|
+
|
|
167
|
+
| Risk level | When assigned | Default behavior |
|
|
168
|
+
|------------|---------------|------------------|
|
|
169
|
+
| `low` | `GET`, `HEAD`, `OPTIONS` with no dangerous keywords | Enabled, no approval required |
|
|
170
|
+
| `medium` | Any mutating method (`POST`, `PUT`, `PATCH`, `DELETE`) | Blocked unless `ALLOW_RESTRICTED_TOOLS=true` |
|
|
171
|
+
| `high` | Any operation matching admin, auth, billing, payments, tokens, secrets, user management patterns | Blocked, approval required |
|
|
172
|
+
|
|
173
|
+
Use `--allow-mutations` at generation time to promote medium-risk tools to enabled-by-default, or override at runtime with env vars.
|
|
174
|
+
|
|
175
|
+
### Layer 2 — Runtime policy enforcement
|
|
176
|
+
|
|
177
|
+
`checkToolPolicy()` runs before every outbound API call, reading env vars at call-time so you can change policy without regenerating:
|
|
178
|
+
|
|
179
|
+
```
|
|
180
|
+
ALLOW_RESTRICTED_TOOLS=true # unlock medium/high-risk tools
|
|
181
|
+
REQUIRE_APPROVALS=false # bypass per-call approval gate
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Layer 3 — HTTP hardening
|
|
185
|
+
|
|
186
|
+
The generated HTTP client enforces these on every request:
|
|
187
|
+
|
|
188
|
+
- **Timeouts** — configurable via `REQUEST_TIMEOUT_MS` (default 30 s)
|
|
189
|
+
- **Response size cap** — configurable via `MAX_RESPONSE_BYTES` (default 10 MB)
|
|
190
|
+
- **No redirects** — `redirect: 'error'` prevents host-pivot attacks
|
|
191
|
+
- **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
|
|
193
|
+
|
|
194
|
+
> **Inspector note**: The built-in inspector at `/inspector` exposes all registered tools. In production, restrict access using a reverse proxy or firewall rule.
|
|
195
|
+
|
|
94
196
|
## Generated Output
|
|
95
197
|
|
|
96
198
|
```
|
|
@@ -101,9 +203,10 @@ my-mcp-server/
|
|
|
101
203
|
├── package.json
|
|
102
204
|
├── README.md # Generated documentation
|
|
103
205
|
└── src/
|
|
104
|
-
├── index.js
|
|
105
|
-
├── http-client.js
|
|
106
|
-
|
|
206
|
+
├── index.js # Main server with tool registrations
|
|
207
|
+
├── http-client.js # Hardened HTTP client
|
|
208
|
+
├── tools-config.js # Tool configurations with risk metadata
|
|
209
|
+
└── policy.js # Runtime security policy
|
|
107
210
|
```
|
|
108
211
|
|
|
109
212
|
## Generated Server Features
|
|
@@ -119,16 +222,32 @@ my-mcp-server/
|
|
|
119
222
|
|
|
120
223
|
### Environment Variables
|
|
121
224
|
|
|
122
|
-
| Variable | Description |
|
|
123
|
-
|
|
124
|
-
| `PORT` | Server port |
|
|
125
|
-
| `NODE_ENV` | development/production |
|
|
126
|
-
| `API_BASE_URL` | Base URL for API calls |
|
|
127
|
-
| `API_KEY` | Bearer token auth |
|
|
128
|
-
| `API_AUTH_HEADER` | Custom header (`Name:value`) |
|
|
129
|
-
| `MCP_URL` | Public URL for widgets |
|
|
130
|
-
| `ALLOWED_ORIGINS` | CORS origins (production) |
|
|
131
|
-
|
|
225
|
+
| Variable | Description | Default |
|
|
226
|
+
|----------|-------------|---------|
|
|
227
|
+
| `PORT` | Server port | `3000` |
|
|
228
|
+
| `NODE_ENV` | `development` / `production` | `development` |
|
|
229
|
+
| `API_BASE_URL` | Base URL for API calls | From spec |
|
|
230
|
+
| `API_KEY` | Bearer token auth | — |
|
|
231
|
+
| `API_AUTH_HEADER` | Custom header (`Name:value`) | — |
|
|
232
|
+
| `MCP_URL` | Public URL for widgets | — |
|
|
233
|
+
| `ALLOWED_ORIGINS` | CORS origins (production) | — |
|
|
234
|
+
| `ALLOW_RESTRICTED_TOOLS` | Allow medium/high-risk tools | `false` |
|
|
235
|
+
| `REQUIRE_APPROVALS` | Require approval for restricted tools | `true` |
|
|
236
|
+
| `ALLOWED_API_HOSTS` | Comma-separated allowed API hostnames | (spec's host) |
|
|
237
|
+
| `REQUEST_TIMEOUT_MS` | Outbound request timeout in ms | `30000` |
|
|
238
|
+
| `MAX_RESPONSE_BYTES` | Maximum response body size in bytes | `10485760` |
|
|
239
|
+
|
|
240
|
+
### Connect to Claude Desktop
|
|
241
|
+
|
|
242
|
+
```json
|
|
243
|
+
{
|
|
244
|
+
"mcpServers": {
|
|
245
|
+
"my-api": {
|
|
246
|
+
"url": "http://localhost:3000/mcp"
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
```
|
|
132
251
|
|
|
133
252
|
### Connect to ChatGPT
|
|
134
253
|
|
|
@@ -136,6 +255,14 @@ The generated server supports the OpenAI Apps SDK out of the box.
|
|
|
136
255
|
|
|
137
256
|
## Advanced Options
|
|
138
257
|
|
|
258
|
+
### Filter by risk level
|
|
259
|
+
|
|
260
|
+
```javascript
|
|
261
|
+
const result = await generateMcpServer(specUrl, outputDir, {
|
|
262
|
+
filterFn: (tool) => tool.riskLevel === 'low',
|
|
263
|
+
});
|
|
264
|
+
```
|
|
265
|
+
|
|
139
266
|
### Filter Tools by Method
|
|
140
267
|
|
|
141
268
|
```javascript
|
|
@@ -169,14 +296,13 @@ const result = await generateMcpServer(specUrl, outputDir, {
|
|
|
169
296
|
```javascript
|
|
170
297
|
const result = await generateMcpServer(specUrl, outputDir, {
|
|
171
298
|
excludeOperationIds: ['deleteUser'],
|
|
299
|
+
allowMutations: false,
|
|
172
300
|
filterFn: (tool) =>
|
|
173
|
-
tool.
|
|
301
|
+
tool.riskLevel === 'low' &&
|
|
174
302
|
tool.pathTemplate.includes('/public/'),
|
|
175
303
|
});
|
|
176
304
|
```
|
|
177
305
|
|
|
178
|
-
|
|
179
|
-
|
|
180
306
|
## Comparison with Raw MCP SDK
|
|
181
307
|
|
|
182
308
|
| Feature | This Generator | Raw SDK |
|
|
@@ -186,4 +312,13 @@ const result = await generateMcpServer(specUrl, outputDir, {
|
|
|
186
312
|
| UI Widgets | ✅ Supported | ❌ Manual |
|
|
187
313
|
| Zod validation | ✅ Generated | ❌ Manual |
|
|
188
314
|
| Authentication | ✅ Configured | ❌ Manual |
|
|
315
|
+
| Risk classification | ✅ Automatic | ❌ Manual |
|
|
316
|
+
| Runtime policy | ✅ Generated | ❌ Manual |
|
|
317
|
+
| HTTP hardening | ✅ Built-in | ❌ Manual |
|
|
189
318
|
| Production ready | ✅ Yes | ⚠️ Requires work |
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
[](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request)
|
|
323
|
+
|
|
324
|
+
Please star this repo for updates! 🌟
|
package/package.json
CHANGED
|
@@ -1,31 +1,248 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "api2ai",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Generate MCP servers from OpenAPI
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
"ship": "bun x standard-version --release-as patch;rm CHANGELOG.md; npm publish",
|
|
12
|
-
"generate": "node generate-mcp-use-server.js",
|
|
13
|
-
"example:petstore": "node generate-mcp-use-server.js https://petstore3.swagger.io/api/v3/openapi.json ./example-petstore --name petstore-api --port 3000"
|
|
14
|
-
},
|
|
15
|
-
"dependencies": {},
|
|
16
|
-
"devDependencies": {
|
|
17
|
-
"js-yaml": "^4.1.0"
|
|
18
|
-
},
|
|
19
|
-
"engines": {
|
|
20
|
-
"node": ">=18.0.0"
|
|
3
|
+
"version": "1.0.4",
|
|
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"
|
|
21
11
|
},
|
|
12
|
+
"homepage": "https://github.com/OpenSourceAGI/dev-tools-starter-agent/tree/master/packages/api2ai-mcp-generator",
|
|
22
13
|
"keywords": [
|
|
23
14
|
"mcp",
|
|
24
|
-
"
|
|
15
|
+
"mcp-server",
|
|
25
16
|
"model-context-protocol",
|
|
26
|
-
"
|
|
17
|
+
"openapi",
|
|
18
|
+
"api",
|
|
27
19
|
"ai",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
20
|
+
"code-generator",
|
|
21
|
+
"zod"
|
|
22
|
+
],
|
|
23
|
+
"exports": {
|
|
24
|
+
".": {
|
|
25
|
+
"types": "./dist/index.d.ts",
|
|
26
|
+
"import": "./dist/index.mjs",
|
|
27
|
+
"require": "./dist/index.js"
|
|
28
|
+
}
|
|
29
|
+
},
|
|
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
|
+
"postinstall": "fumadocs-mdx && drizzle-kit push",
|
|
46
|
+
"make": "concurrently \"next build && next start \" \"wait-on http://localhost:3000 && opener http://localhost:3000\"",
|
|
47
|
+
"start": "next start",
|
|
48
|
+
"test": "vitest run",
|
|
49
|
+
"test:watch": "vitest",
|
|
50
|
+
"coverage": "vitest run --coverage"
|
|
51
|
+
},
|
|
52
|
+
"dependencies": {
|
|
53
|
+
"@ai-sdk/react": "3.0.3",
|
|
54
|
+
"@aws-sdk/client-rds-data": "latest",
|
|
55
|
+
"@better-auth/core": "latest",
|
|
56
|
+
"@better-auth/stripe": "^1.4.7",
|
|
57
|
+
"@cloudflare/workers-types": "latest",
|
|
58
|
+
"@electric-sql/pglite": "latest",
|
|
59
|
+
"@emotion/is-prop-valid": "latest",
|
|
60
|
+
"@fumadocs/mdx-remote": "^1.4.3",
|
|
61
|
+
"@langchain/core": "^1.1.5",
|
|
62
|
+
"@langchain/groq": "^1.0.2",
|
|
63
|
+
"@langchain/openai": "^1.2.0",
|
|
64
|
+
"@libsql/client": "^0.15.15",
|
|
65
|
+
"@libsql/client-wasm": "latest",
|
|
66
|
+
"@lynx-js/react": "latest",
|
|
67
|
+
"@mixedbread/sdk": "latest",
|
|
68
|
+
"@neondatabase/serverless": "latest",
|
|
69
|
+
"@op-engineering/op-sqlite": "latest",
|
|
70
|
+
"@opentelemetry/api": "latest",
|
|
71
|
+
"@orama/core": "latest",
|
|
72
|
+
"@planetscale/database": "latest",
|
|
73
|
+
"@prisma/client": "latest",
|
|
74
|
+
"@radix-ui/react-accordion": "1.2.12",
|
|
75
|
+
"@radix-ui/react-alert-dialog": "1.1.15",
|
|
76
|
+
"@radix-ui/react-aspect-ratio": "1.1.8",
|
|
77
|
+
"@radix-ui/react-avatar": "^1.1.11",
|
|
78
|
+
"@radix-ui/react-checkbox": "1.3.3",
|
|
79
|
+
"@radix-ui/react-collapsible": "^1.1.12",
|
|
80
|
+
"@radix-ui/react-context-menu": "2.2.16",
|
|
81
|
+
"@radix-ui/react-dialog": "^1.1.15",
|
|
82
|
+
"@radix-ui/react-dropdown-menu": "^2.1.16",
|
|
83
|
+
"@radix-ui/react-hover-card": "1.1.15",
|
|
84
|
+
"@radix-ui/react-label": "2.1.8",
|
|
85
|
+
"@radix-ui/react-menubar": "1.1.16",
|
|
86
|
+
"@radix-ui/react-navigation-menu": "1.2.14",
|
|
87
|
+
"@radix-ui/react-popover": "1.1.15",
|
|
88
|
+
"@radix-ui/react-presence": "1.1.5",
|
|
89
|
+
"@radix-ui/react-progress": "1.1.8",
|
|
90
|
+
"@radix-ui/react-radio-group": "^1.3.8",
|
|
91
|
+
"@radix-ui/react-scroll-area": "1.2.10",
|
|
92
|
+
"@radix-ui/react-select": "2.2.6",
|
|
93
|
+
"@radix-ui/react-separator": "^1.1.8",
|
|
94
|
+
"@radix-ui/react-slider": "1.3.6",
|
|
95
|
+
"@radix-ui/react-slot": "^1.2.4",
|
|
96
|
+
"@radix-ui/react-switch": "1.2.6",
|
|
97
|
+
"@radix-ui/react-tabs": "1.1.13",
|
|
98
|
+
"@radix-ui/react-toast": "1.2.15",
|
|
99
|
+
"@radix-ui/react-toggle": "1.1.10",
|
|
100
|
+
"@radix-ui/react-toggle-group": "1.1.11",
|
|
101
|
+
"@radix-ui/react-tooltip": "^1.2.8",
|
|
102
|
+
"@react-email/render": "latest",
|
|
103
|
+
"@react-three/drei": "^10.7.7",
|
|
104
|
+
"@react-three/fiber": "^9.4.2",
|
|
105
|
+
"@scalar/api-client-react": "latest",
|
|
106
|
+
"@scalar/api-reference": "^1.40.5",
|
|
107
|
+
"@scalar/api-reference-react": "^0.8.11",
|
|
108
|
+
"@shikijs/rehype": "^3.20.0",
|
|
109
|
+
"@shikijs/transformers": "^3.20.0",
|
|
110
|
+
"@silevis/reactgrid": "^4.1.17",
|
|
111
|
+
"@t3-oss/env-nextjs": "0.13.10",
|
|
112
|
+
"@tabler/icons-react": "^3.36.0",
|
|
113
|
+
"@tanstack/react-router": "latest",
|
|
114
|
+
"@tanstack/react-start": "latest",
|
|
115
|
+
"@tidbcloud/serverless": "latest",
|
|
116
|
+
"@types/better-sqlite3": "latest",
|
|
117
|
+
"@types/dompurify": "^3.2.0",
|
|
118
|
+
"@types/js-yaml": "^4.0.9",
|
|
119
|
+
"@types/marked": "^6.0.0",
|
|
120
|
+
"@types/pg": "latest",
|
|
121
|
+
"@types/sql.js": "latest",
|
|
122
|
+
"@upstash/redis": "latest",
|
|
123
|
+
"@vercel/analytics": "1.6.1",
|
|
124
|
+
"@vercel/postgres": "latest",
|
|
125
|
+
"@xata.io/client": "latest",
|
|
126
|
+
"ai": "6.0.3",
|
|
127
|
+
"algoliasearch": "latest",
|
|
128
|
+
"arktype": "latest",
|
|
129
|
+
"autoprefixer": "^10.4.22",
|
|
130
|
+
"axios": "^1.13.2",
|
|
131
|
+
"better-auth": "^1.4.7",
|
|
132
|
+
"better-sqlite3": "latest",
|
|
133
|
+
"bun-types": "latest",
|
|
134
|
+
"canvas": "latest",
|
|
135
|
+
"class-variance-authority": "^0.7.1",
|
|
136
|
+
"cli-highlight": "^2.1.11",
|
|
137
|
+
"clsx": "^2.1.1",
|
|
138
|
+
"cmdk": "^1.1.1",
|
|
139
|
+
"date-fns": "4.1.0",
|
|
140
|
+
"dompurify": "^3.3.1",
|
|
141
|
+
"dotenv": "^17.2.3",
|
|
142
|
+
"drizzle-orm": "^0.45.1",
|
|
143
|
+
"embla-carousel-react": "8.6.0",
|
|
144
|
+
"ethers": "^6.16.0",
|
|
145
|
+
"expo": "latest",
|
|
146
|
+
"expo-asset": "latest",
|
|
147
|
+
"expo-file-system": "latest",
|
|
148
|
+
"expo-gl": "latest",
|
|
149
|
+
"expo-sqlite": "latest",
|
|
150
|
+
"feed": "^5.1.0",
|
|
151
|
+
"fumadocs-core": "^16.2.5",
|
|
152
|
+
"fumadocs-mdx": "^14.1.1",
|
|
153
|
+
"fumadocs-openapi": "^10.1.4",
|
|
154
|
+
"fumadocs-twoslash": "^3.1.10",
|
|
155
|
+
"fumadocs-typescript": "^4.0.14",
|
|
156
|
+
"fumadocs-ui": "^16.2.5",
|
|
157
|
+
"gel": "latest",
|
|
158
|
+
"grab-url": "^1.0.15",
|
|
159
|
+
"hast-util-to-jsx-runtime": "2.3.6",
|
|
160
|
+
"highlight.js": "^11.11.1",
|
|
161
|
+
"jiti": "latest",
|
|
162
|
+
"js-yaml": "^4.1.1",
|
|
163
|
+
"jszip": "^3.10.1",
|
|
164
|
+
"katex": "^0.16.27",
|
|
165
|
+
"knex": "latest",
|
|
166
|
+
"kysely": "latest",
|
|
167
|
+
"langchain": "^1.2.0",
|
|
168
|
+
"less": "latest",
|
|
169
|
+
"lightningcss": "latest",
|
|
170
|
+
"linkedom": "^0.18.12",
|
|
171
|
+
"lucide-react": "^0.561.0",
|
|
172
|
+
"marked": "^17.0.1",
|
|
173
|
+
"mermaid": "^11.12.2",
|
|
174
|
+
"mongodb": "latest",
|
|
175
|
+
"motion": "^12.23.26",
|
|
176
|
+
"mysql2": "latest",
|
|
177
|
+
"next": "16.0.10",
|
|
178
|
+
"next-themes": "^0.4.6",
|
|
179
|
+
"pg": "latest",
|
|
180
|
+
"pinets": "^0.5.0",
|
|
181
|
+
"postgres": "latest",
|
|
182
|
+
"prisma": "latest",
|
|
183
|
+
"react": "19.2.3",
|
|
184
|
+
"react-day-picker": "9.12.0",
|
|
185
|
+
"react-dom": "19.2.3",
|
|
186
|
+
"react-hook-form": "^7.68.0",
|
|
187
|
+
"react-is": "^19.2.3",
|
|
188
|
+
"react-native": "latest",
|
|
189
|
+
"react-resizable-panels": "^3.0.6",
|
|
190
|
+
"react-router": "latest",
|
|
191
|
+
"rehype-katex": "^7.0.1",
|
|
192
|
+
"remark": "15.0.1",
|
|
193
|
+
"remark-gfm": "4.0.1",
|
|
194
|
+
"remark-math": "^6.0.0",
|
|
195
|
+
"remark-rehype": "11.1.2",
|
|
196
|
+
"resend": "^6.6.0",
|
|
197
|
+
"sass": "latest",
|
|
198
|
+
"sass-embedded": "latest",
|
|
199
|
+
"simplex-noise": "^4.0.3",
|
|
200
|
+
"siwe": "^3.0.0",
|
|
201
|
+
"solid-js": "latest",
|
|
202
|
+
"sonner": "^2.0.7",
|
|
203
|
+
"sql.js": "latest",
|
|
204
|
+
"sqlite3": "latest",
|
|
205
|
+
"stripe": "^20.0.0",
|
|
206
|
+
"stylus": "latest",
|
|
207
|
+
"sugarss": "latest",
|
|
208
|
+
"tailwind-merge": "^3.4.0",
|
|
209
|
+
"tailwindcss-animate": "^1.0.7",
|
|
210
|
+
"tavily": "^1.0.2",
|
|
211
|
+
"terser": "^5.44.1",
|
|
212
|
+
"three": "^0.182.0",
|
|
213
|
+
"three-globe": "^2.45.0",
|
|
214
|
+
"tsx": "latest",
|
|
215
|
+
"unist-util-visit": "5.0.0",
|
|
216
|
+
"valibot": "latest",
|
|
217
|
+
"vaul": "^1.1.2",
|
|
218
|
+
"viem": "^2.42.0",
|
|
219
|
+
"vitest": "latest",
|
|
220
|
+
"waku": "latest",
|
|
221
|
+
"yaml": "latest",
|
|
222
|
+
"zod": "4.1.13"
|
|
223
|
+
},
|
|
224
|
+
"devDependencies": {
|
|
225
|
+
"@fumadocs/cli": "^1.1.0",
|
|
226
|
+
"@tailwindcss/postcss": "^4.1.18",
|
|
227
|
+
"@types/node": "^25.0.2",
|
|
228
|
+
"@types/react": "^19.2.7",
|
|
229
|
+
"@types/react-dom": "^19.2.3",
|
|
230
|
+
"@types/three": "^0.182.0",
|
|
231
|
+
"@vitest/coverage-v8": "^4.1.0",
|
|
232
|
+
"concurrently": "^9.2.1",
|
|
233
|
+
"drizzle-kit": "^0.31.8",
|
|
234
|
+
"opener": "^1.5.2",
|
|
235
|
+
"postcss": "^8.5.6",
|
|
236
|
+
"tailwindcss": "^4.1.18",
|
|
237
|
+
"tw-animate-css": "1.4.0",
|
|
238
|
+
"typescript": "^5.9.3",
|
|
239
|
+
"vite": "^7.3.0",
|
|
240
|
+
"vite-plugin-dts": "^4.5.4",
|
|
241
|
+
"vitest": "^4.1.0",
|
|
242
|
+
"wait-on": "^9.0.3"
|
|
243
|
+
},
|
|
244
|
+
"data": "dist/index.d.ts",
|
|
245
|
+
"trustedDependencies": [
|
|
246
|
+
"pg-native"
|
|
30
247
|
]
|
|
31
248
|
}
|
package/bun.lock
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"lockfileVersion": 1,
|
|
3
|
-
"configVersion": 1,
|
|
4
|
-
"workspaces": {
|
|
5
|
-
"": {
|
|
6
|
-
"name": "api2ai",
|
|
7
|
-
"devDependencies": {
|
|
8
|
-
"js-yaml": "^4.1.0",
|
|
9
|
-
},
|
|
10
|
-
},
|
|
11
|
-
},
|
|
12
|
-
"packages": {
|
|
13
|
-
"argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
|
|
14
|
-
|
|
15
|
-
"js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
|
|
16
|
-
}
|
|
17
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Server Configuration
|
|
2
|
-
PORT=3000
|
|
3
|
-
NODE_ENV=development
|
|
4
|
-
|
|
5
|
-
# API Configuration
|
|
6
|
-
API_BASE_URL=/api/v3
|
|
7
|
-
|
|
8
|
-
# Authentication
|
|
9
|
-
API_KEY=your-api-key-here
|
|
10
|
-
# API_AUTH_HEADER=Header-Name:header-value
|
|
11
|
-
|
|
12
|
-
# MCP Configuration
|
|
13
|
-
# MCP_URL=https://your-mcp-server.com
|
|
14
|
-
# ALLOWED_ORIGINS=https://allowed-origin.com
|