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 +76 -82
- package/package.json +25 -237
- package/src/cli.js +103 -0
- package/src/generate-mcp-use-server.js +18 -0
- package/src/generate.js +90 -0
- package/src/index.js +15 -0
- package/src/spec/classify-risk.js +53 -0
- package/src/spec/extract-tools.js +110 -0
- package/src/spec/load-spec.js +55 -0
- package/src/spec/schema-to-zod.js +213 -0
- package/src/templates/env.js +46 -0
- package/src/templates/http-client.js +126 -0
- package/src/templates/package-json.js +21 -0
- package/src/templates/policy.js +69 -0
- package/src/templates/readme.js +124 -0
- package/src/templates/server-index.js +128 -0
- package/src/templates/tools-config.js +25 -0
- package/src/versions.js +16 -0
package/README.md
CHANGED
|
@@ -1,56 +1,29 @@
|
|
|
1
1
|
|
|
2
2
|
<p align="center">
|
|
3
|
-
<img
|
|
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> |
|
|
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
|
-
-
|
|
52
|
-
-
|
|
53
|
-
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
--
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
108
|
+
import { generateMcpServer, renderMcpServer, extractTools, loadOpenApiSpec } from "api2ai";
|
|
134
109
|
|
|
135
110
|
// Generate complete server
|
|
136
111
|
const result = await generateMcpServer(
|
|
137
|
-
|
|
138
|
-
|
|
112
|
+
"https://api.example.com/openapi.json",
|
|
113
|
+
"./output-folder",
|
|
139
114
|
{
|
|
140
|
-
serverName:
|
|
141
|
-
baseUrl:
|
|
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: [
|
|
145
|
-
excludeTags: [
|
|
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(
|
|
127
|
+
const spec = await loadOpenApiSpec("./my-spec.json");
|
|
153
128
|
const tools = extractTools(spec, {
|
|
154
|
-
filterFn: (tool) => tool.riskLevel ===
|
|
155
|
-
excludeOperationIds: [
|
|
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`
|
|
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**:
|
|
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
|
-
| `
|
|
219
|
-
| `
|
|
220
|
-
|
|
|
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
|
-
| `
|
|
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
|
|
233
|
-
| `ALLOWED_ORIGINS` |
|
|
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
|
|
229
|
+
### Connect to Claude Code
|
|
253
230
|
|
|
254
|
-
|
|
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 ===
|
|
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) => [
|
|
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
|
-
|
|
280
|
-
|
|
281
|
-
|
|
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(
|
|
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: [
|
|
277
|
+
excludeOperationIds: ["deleteUser"],
|
|
299
278
|
allowMutations: false,
|
|
300
|
-
filterFn: (tool) =>
|
|
301
|
-
tool.riskLevel ===
|
|
302
|
-
tool.pathTemplate.includes(
|
|
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
|
-
|
|
316
|
+
## License
|
|
323
317
|
|
|
324
|
-
|
|
318
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,247 +1,35 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "api2ai",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "Generate production-ready MCP
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
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
|
-
"
|
|
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
|
-
|
|
26
|
-
|
|
27
|
-
"require": "./dist/index.js"
|
|
28
|
-
}
|
|
11
|
+
".": "./src/index.js",
|
|
12
|
+
"./cli": "./src/cli.js",
|
|
13
|
+
"./package.json": "./package.json"
|
|
29
14
|
},
|
|
30
|
-
"
|
|
31
|
-
|
|
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
|
-
"
|
|
52
|
-
"
|
|
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
|
-
"
|
|
224
|
-
|
|
225
|
-
"
|
|
226
|
-
"
|
|
227
|
-
"
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
"
|
|
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
|
-
"
|
|
244
|
-
"
|
|
245
|
-
"
|
|
30
|
+
"homepage": "https://github.com/OpenSourceAGI/GRAB-URL/tree/master/packages/api2ai#readme",
|
|
31
|
+
"files": [
|
|
32
|
+
"src",
|
|
33
|
+
"README.md"
|
|
246
34
|
]
|
|
247
35
|
}
|