api2ai 1.0.3 → 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 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> &nbsp;|&nbsp;
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
- node generate-mcp-use-server.js \
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> Server name (default: api-mcp-server)
41
- --base-url <url> Override API base URL
42
- --port <port> Server port (default: 3000)
43
- --help Show help
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.method === 'get', // Only GET endpoints
90
- excludeOperationIds: ['deleteUser'], // Exclude specific operations
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 # Main server with tool registrations
105
- ├── http-client.js # HTTP utilities
106
- └── tools-config.js # Tool configurations
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.method === 'get' &&
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
+ [![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)
323
+
324
+ Please star this repo for updates! 🌟
package/package.json CHANGED
@@ -1,33 +1,248 @@
1
1
  {
2
2
  "name": "api2ai",
3
- "version": "1.0.3",
4
- "description": "Generate MCP servers from OpenAPI specs using the mcp-use framework",
5
- "type": "module",
6
- "main": "generate-mcp-use-server.js",
7
- "bin": {
8
- "api2ai": "./generate-mcp-use-server.js"
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"
9
11
  },
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
+ ],
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
+ ],
10
36
  "scripts": {
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"
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"
14
51
  },
15
52
  "dependencies": {
16
- "js-yaml": "^4.1.0"
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"
17
223
  },
18
224
  "devDependencies": {
19
- "js-yaml": "^4.1.0"
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"
20
243
  },
21
- "engines": {
22
- "node": ">=18.0.0"
23
- },
24
- "keywords": [
25
- "mcp",
26
- "openapi",
27
- "model-context-protocol",
28
- "mcp-use",
29
- "ai",
30
- "llm",
31
- "tools"
244
+ "data": "dist/index.d.ts",
245
+ "trustedDependencies": [
246
+ "pg-native"
32
247
  ]
33
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