mcp-openapi 0.1.0 → 0.2.0
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 +2 -12
- package/dist/src/config/cli-args.d.ts.map +1 -1
- package/dist/src/config/cli-args.js +15 -5
- package/dist/src/config/cli-args.js.map +1 -1
- package/dist/src/config/types.d.ts +10 -0
- package/dist/src/config/types.d.ts.map +1 -1
- package/dist/src/config/types.js.map +1 -1
- package/dist/src/executor/response-mapper.d.ts +8 -1
- package/dist/src/executor/response-mapper.d.ts.map +1 -1
- package/dist/src/executor/response-mapper.js +26 -8
- package/dist/src/executor/response-mapper.js.map +1 -1
- package/dist/src/executor/response-transform.d.ts +36 -0
- package/dist/src/executor/response-transform.d.ts.map +1 -0
- package/dist/src/executor/response-transform.js +107 -0
- package/dist/src/executor/response-transform.js.map +1 -0
- package/dist/src/licensing/gate.d.ts +3 -0
- package/dist/src/licensing/gate.d.ts.map +1 -0
- package/dist/src/licensing/gate.js +8 -0
- package/dist/src/licensing/gate.js.map +1 -0
- package/dist/src/licensing/index.d.ts +5 -0
- package/dist/src/licensing/index.d.ts.map +1 -0
- package/dist/src/licensing/index.js +4 -0
- package/dist/src/licensing/index.js.map +1 -0
- package/dist/src/licensing/types.d.ts +16 -0
- package/dist/src/licensing/types.d.ts.map +1 -0
- package/dist/src/licensing/types.js +14 -0
- package/dist/src/licensing/types.js.map +1 -0
- package/dist/src/licensing/validator.d.ts +4 -0
- package/dist/src/licensing/validator.d.ts.map +1 -0
- package/dist/src/licensing/validator.js +33 -0
- package/dist/src/licensing/validator.js.map +1 -0
- package/dist/src/server.d.ts +37 -3
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +76 -23
- package/dist/src/server.js.map +1 -1
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -316,20 +316,10 @@ console.log(`Loaded ${tools.length} tools from ${spec.info.title}`);
|
|
|
316
316
|
Contributions are welcome. Here is how to get started:
|
|
317
317
|
|
|
318
318
|
```bash
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
cd auto-revenue
|
|
322
|
-
|
|
323
|
-
# Install dependencies
|
|
319
|
+
git clone https://github.com/Docat0209/mcp-openapi.git
|
|
320
|
+
cd mcp-openapi
|
|
324
321
|
pnpm install
|
|
325
|
-
|
|
326
|
-
# Navigate to the package
|
|
327
|
-
cd packages/mcp-servers/openapi
|
|
328
|
-
|
|
329
|
-
# Run tests
|
|
330
322
|
pnpm test
|
|
331
|
-
|
|
332
|
-
# Build
|
|
333
323
|
pnpm build
|
|
334
324
|
```
|
|
335
325
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../../../src/config/cli-args.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"cli-args.d.ts","sourceRoot":"","sources":["../../../src/config/cli-args.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/D,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CAiF7D;AAED,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAGrF;AAED,wBAAgB,YAAY,CAC3B,UAAU,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACrC,SAAS,EAAE,gBAAgB,GACzB,gBAAgB,CAQlB"}
|
|
@@ -26,6 +26,8 @@ export function parseCliArgs(argv) {
|
|
|
26
26
|
"auth-scopes": { type: "string" },
|
|
27
27
|
// Header options
|
|
28
28
|
header: { type: "string", multiple: true, short: "H" },
|
|
29
|
+
// Pro options
|
|
30
|
+
"license-key": { type: "string" },
|
|
29
31
|
help: { type: "boolean", short: "h" },
|
|
30
32
|
version: { type: "boolean", short: "v" },
|
|
31
33
|
},
|
|
@@ -36,7 +38,7 @@ export function parseCliArgs(argv) {
|
|
|
36
38
|
process.exit(0);
|
|
37
39
|
}
|
|
38
40
|
if (values.version) {
|
|
39
|
-
console.error("mcp-openapi v0.
|
|
41
|
+
console.error("mcp-openapi v0.2.0");
|
|
40
42
|
process.exit(0);
|
|
41
43
|
}
|
|
42
44
|
const config = {
|
|
@@ -58,6 +60,11 @@ export function parseCliArgs(argv) {
|
|
|
58
60
|
config.transport = values.transport;
|
|
59
61
|
if (values.port)
|
|
60
62
|
config.port = Number(values.port);
|
|
63
|
+
// License key (CLI or env var)
|
|
64
|
+
const licenseKey = values["license-key"] ||
|
|
65
|
+
process.env.MCP_OPENAPI_LICENSE_KEY;
|
|
66
|
+
if (licenseKey)
|
|
67
|
+
config.licenseKey = licenseKey;
|
|
61
68
|
// Parse auth
|
|
62
69
|
const authType = values["auth-type"];
|
|
63
70
|
if (authType) {
|
|
@@ -117,7 +124,7 @@ function printHelp() {
|
|
|
117
124
|
mcp-openapi - Convert any OpenAPI/Swagger spec into MCP tools
|
|
118
125
|
|
|
119
126
|
USAGE:
|
|
120
|
-
npx
|
|
127
|
+
npx mcp-openapi --spec <url-or-path> [options]
|
|
121
128
|
|
|
122
129
|
OPTIONS:
|
|
123
130
|
-s, --spec <url|path> OpenAPI spec URL or local file path (required)
|
|
@@ -145,10 +152,13 @@ AUTH OPTIONS:
|
|
|
145
152
|
--auth-token-url <url>
|
|
146
153
|
--auth-scopes <scopes>
|
|
147
154
|
|
|
155
|
+
PRO OPTIONS:
|
|
156
|
+
--license-key <key> Pro license key (or set MCP_OPENAPI_LICENSE_KEY env)
|
|
157
|
+
|
|
148
158
|
EXAMPLES:
|
|
149
|
-
npx
|
|
150
|
-
npx
|
|
151
|
-
npx
|
|
159
|
+
npx mcp-openapi --spec https://petstore3.swagger.io/api/v3/openapi.json
|
|
160
|
+
npx mcp-openapi --spec ./api.yaml --auth-type bearer --auth-token '$API_KEY'
|
|
161
|
+
npx mcp-openapi --spec ./api.json --prefix github --include 'listRepos,getRepo'
|
|
152
162
|
`);
|
|
153
163
|
}
|
|
154
164
|
//# sourceMappingURL=cli-args.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../../src/config/cli-args.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli-args.js","sourceRoot":"","sources":["../../../src/config/cli-args.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAG5C,MAAM,UAAU,YAAY,CAAC,IAAc;IAC1C,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QAC5B,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnB,OAAO,EAAE;YACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YACpC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;YACtC,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC9B,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC1B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC3B,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC7B,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxB,eAAe;YACf,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC/B,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAChC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YAC7B,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACpC,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACxC,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACpC,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,iBAAiB;YACjB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE;YACtD,cAAc;YACd,aAAa,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;YACjC,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;YACrC,OAAO,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE;SACxC;QACD,MAAM,EAAE,KAAK;KACb,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,MAAM,GAAqB;QAChC,IAAI,EAAG,MAAM,CAAC,IAAe,IAAI,EAAE;KACnC,CAAC;IAEF,IAAI,MAAM,CAAC,UAAU,CAAC;QAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAW,CAAC;IACtE,IAAI,MAAM,CAAC,MAAM;QAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;IAC3D,IAAI,MAAM,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,GAAI,MAAM,CAAC,OAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,GAAI,MAAM,CAAC,OAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,aAAa,CAAC;QAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,SAAS;QAAE,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAA4B,CAAC;IAC7E,IAAI,MAAM,CAAC,IAAI;QAAE,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAEnD,+BAA+B;IAC/B,MAAM,UAAU,GACd,MAAM,CAAC,aAAa,CAAY;QACjC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC;IACrC,IAAI,UAAU;QAAE,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAE/C,aAAa;IACb,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAuB,CAAC;IAC3D,IAAI,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAED,uBAAuB;IACvB,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,CAAC,OAAO,GAAG,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,MAAkB,EAAE,CAAC;YAC3C,MAAM,QAAQ,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAChC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;gBAClB,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5E,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,MAAM,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAChD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAA8B,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,YAAY,CAC3B,UAAqC,EACrC,SAA2B;IAE3B,wCAAwC;IACxC,OAAO;QACN,GAAG,UAAU;QACb,GAAG,MAAM,CAAC,WAAW,CACpB,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CACxE;KACmB,CAAC;AACvB,CAAC;AAED,SAAS,aAAa,CACrB,QAAgB,EAChB,MAA+B;IAE/B,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,QAAQ;YACZ,OAAO;gBACN,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAG,MAAM,CAAC,YAAY,CAAY,IAAI,EAAE;aAC7C,CAAC;QACH,KAAK,SAAS;YACb,OAAO;gBACN,IAAI,EAAE,SAAS;gBACf,IAAI,EAAG,MAAM,CAAC,WAAW,CAAY,IAAI,eAAe;gBACxD,KAAK,EAAG,MAAM,CAAC,YAAY,CAAY,IAAI,EAAE;gBAC7C,EAAE,EAAE,CAAE,MAAM,CAAC,SAAS,CAAY,IAAI,QAAQ,CAAuB;aACrE,CAAC;QACH,KAAK,QAAQ;YACZ,OAAO;gBACN,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAG,MAAM,CAAC,gBAAgB,CAAY,IAAI,EAAE;gBACpD,YAAY,EAAG,MAAM,CAAC,oBAAoB,CAAY,IAAI,EAAE;gBAC5D,QAAQ,EAAG,MAAM,CAAC,gBAAgB,CAAY,IAAI,EAAE;gBACpD,MAAM,EAAG,MAAM,CAAC,aAAa,CAAY,EAAE,KAAK,CAAC,GAAG,CAAC;aACrD,CAAC;QACH;YACC,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;AACF,CAAC;AAED,SAAS,SAAS;IACjB,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCd,CAAC,CAAC;AACH,CAAC"}
|
|
@@ -21,6 +21,16 @@ export interface McpOpenApiConfig {
|
|
|
21
21
|
transport?: "stdio" | "sse";
|
|
22
22
|
/** SSE port (default: 3000) */
|
|
23
23
|
port?: number;
|
|
24
|
+
/** Pro: License key for paid features */
|
|
25
|
+
licenseKey?: string;
|
|
26
|
+
/** Pro: JMESPath transforms per tool name (supports glob patterns) */
|
|
27
|
+
transforms?: Record<string, string>;
|
|
28
|
+
/** Pro: Smart response handling options */
|
|
29
|
+
response?: {
|
|
30
|
+
maxLength?: number;
|
|
31
|
+
arraySliceSize?: number;
|
|
32
|
+
maxDepth?: number;
|
|
33
|
+
};
|
|
24
34
|
}
|
|
25
35
|
export type AuthConfig = {
|
|
26
36
|
type: "api-key";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC5B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAChC,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uDAAuD;IACvD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,2DAA2D;IAC3D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC5B,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE;QACV,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACF;AAED,MAAM,MAAM,UAAU,GACnB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,QAAQ,GAAG,OAAO,CAAA;CAAE,GACxE;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjC;IACA,IAAI,EAAE,QAAQ,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEL,eAAO,MAAM,cAAc;;;;;CAKU,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/config/types.ts"],"names":[],"mappings":"AA8CA,MAAM,CAAC,MAAM,cAAc,GAAG;IAC7B,OAAO,EAAE,MAAM;IACf,UAAU,EAAE,CAAC;IACb,SAAS,EAAE,OAAgB;IAC3B,IAAI,EAAE,IAAI;CAC0B,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { HttpResponse } from "./http-client.js";
|
|
2
|
+
import { type TransformOptions } from "./response-transform.js";
|
|
2
3
|
export interface McpToolResult {
|
|
3
4
|
content: Array<{
|
|
4
5
|
type: "text";
|
|
@@ -6,5 +7,11 @@ export interface McpToolResult {
|
|
|
6
7
|
}>;
|
|
7
8
|
isError?: boolean;
|
|
8
9
|
}
|
|
9
|
-
export
|
|
10
|
+
export interface MapResponseOptions {
|
|
11
|
+
/** JMESPath expression to filter response data */
|
|
12
|
+
jmesPath?: string;
|
|
13
|
+
/** Smart truncation options (Pro feature) */
|
|
14
|
+
smartTruncation?: TransformOptions;
|
|
15
|
+
}
|
|
16
|
+
export declare function mapResponse(response: HttpResponse, options?: MapResponseOptions): Promise<McpToolResult>;
|
|
10
17
|
//# sourceMappingURL=response-mapper.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-mapper.d.ts","sourceRoot":"","sources":["../../../src/executor/response-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"response-mapper.d.ts","sourceRoot":"","sources":["../../../src/executor/response-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAGN,KAAK,gBAAgB,EACrB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,WAAW,aAAa;IAC7B,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IAClC,kDAAkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,eAAe,CAAC,EAAE,gBAAgB,CAAC;CACnC;AAID,wBAAsB,WAAW,CAChC,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC,aAAa,CAAC,CAsExB"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { applyJmesPath, smartTruncate, } from "./response-transform.js";
|
|
2
|
+
const MAX_RESPONSE_LENGTH = 50_000;
|
|
3
|
+
export async function mapResponse(response, options) {
|
|
3
4
|
// HTTP error
|
|
4
5
|
if (response.status >= 400) {
|
|
5
6
|
const body = truncate(response.body, 2000);
|
|
@@ -13,19 +14,34 @@ export function mapResponse(response) {
|
|
|
13
14
|
isError: true,
|
|
14
15
|
};
|
|
15
16
|
}
|
|
16
|
-
// JSON response —
|
|
17
|
+
// JSON response — apply transforms then truncate
|
|
17
18
|
if (response.contentType.includes("application/json")) {
|
|
18
19
|
try {
|
|
19
|
-
|
|
20
|
+
let parsed = JSON.parse(response.body);
|
|
21
|
+
// Apply JMESPath transform if configured (Pro)
|
|
22
|
+
if (options?.jmesPath) {
|
|
23
|
+
parsed = await applyJmesPath(parsed, options.jmesPath);
|
|
24
|
+
}
|
|
25
|
+
// Use smart truncation if configured (Pro), else hard truncate
|
|
26
|
+
if (options?.smartTruncation) {
|
|
27
|
+
const text = smartTruncate(parsed, options.smartTruncation);
|
|
28
|
+
return { content: [{ type: "text", text }] };
|
|
29
|
+
}
|
|
20
30
|
const formatted = JSON.stringify(parsed, null, 2);
|
|
21
31
|
return {
|
|
22
|
-
content: [
|
|
32
|
+
content: [
|
|
33
|
+
{ type: "text", text: truncate(formatted, MAX_RESPONSE_LENGTH) },
|
|
34
|
+
],
|
|
23
35
|
};
|
|
24
36
|
}
|
|
25
37
|
catch {
|
|
26
|
-
// Not valid JSON despite content type — return raw
|
|
27
38
|
return {
|
|
28
|
-
content: [
|
|
39
|
+
content: [
|
|
40
|
+
{
|
|
41
|
+
type: "text",
|
|
42
|
+
text: truncate(response.body, MAX_RESPONSE_LENGTH),
|
|
43
|
+
},
|
|
44
|
+
],
|
|
29
45
|
};
|
|
30
46
|
}
|
|
31
47
|
}
|
|
@@ -33,7 +49,9 @@ export function mapResponse(response) {
|
|
|
33
49
|
if (response.contentType.includes("text/") ||
|
|
34
50
|
response.contentType.includes("xml")) {
|
|
35
51
|
return {
|
|
36
|
-
content: [
|
|
52
|
+
content: [
|
|
53
|
+
{ type: "text", text: truncate(response.body, MAX_RESPONSE_LENGTH) },
|
|
54
|
+
],
|
|
37
55
|
};
|
|
38
56
|
}
|
|
39
57
|
// Binary response
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-mapper.js","sourceRoot":"","sources":["../../../src/executor/response-mapper.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"response-mapper.js","sourceRoot":"","sources":["../../../src/executor/response-mapper.ts"],"names":[],"mappings":"AACA,OAAO,EACN,aAAa,EACb,aAAa,GAEb,MAAM,yBAAyB,CAAC;AAcjC,MAAM,mBAAmB,GAAG,MAAM,CAAC;AAEnC,MAAM,CAAC,KAAK,UAAU,WAAW,CAChC,QAAsB,EACtB,OAA4B;IAE5B,aAAa;IACb,IAAI,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC5B,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC3C,OAAO;YACN,OAAO,EAAE;gBACR;oBACC,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,cAAc,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,OAAO,IAAI,EAAE;iBACvE;aACD;YACD,OAAO,EAAE,IAAI;SACb,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,IAAI,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC;YACJ,IAAI,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEvC,+CAA+C;YAC/C,IAAI,OAAO,EAAE,QAAQ,EAAE,CAAC;gBACvB,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;YACxD,CAAC;YAED,+DAA+D;YAC/D,IAAI,OAAO,EAAE,eAAe,EAAE,CAAC;gBAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC5D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC9C,CAAC;YAED,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,OAAO;gBACN,OAAO,EAAE;oBACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE;iBAChE;aACD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,OAAO;gBACN,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;qBAClD;iBACD;aACD,CAAC;QACH,CAAC;IACF,CAAC;IAED,gBAAgB;IAChB,IACC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC;QACtC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,EACnC,CAAC;QACF,OAAO;YACN,OAAO,EAAE;gBACR,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC,EAAE;aACpE;SACD,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,OAAO;QACN,OAAO,EAAE;YACR;gBACC,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,qBAAqB,QAAQ,CAAC,WAAW,KAAK,QAAQ,CAAC,IAAI,CAAC,MAAM,gBAAgB,QAAQ,CAAC,MAAM,GAAG;aAC1G;SACD;KACD,CAAC;AACH,CAAC;AAED,SAAS,QAAQ,CAAC,IAAY,EAAE,SAAiB;IAChD,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;IAC1C,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,uBAAuB,IAAI,CAAC,MAAM,GAAG,SAAS,sBAAsB,CAAC;AACxG,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart response transformation for Pro tier.
|
|
3
|
+
* - JMESPath transforms: filter API responses to relevant fields
|
|
4
|
+
* - Smart truncation: array slicing with metadata instead of hard cut
|
|
5
|
+
*/
|
|
6
|
+
export interface TransformOptions {
|
|
7
|
+
/** JMESPath expression to apply before truncation */
|
|
8
|
+
jmesPath?: string;
|
|
9
|
+
/** Max response text length (default: 50000) */
|
|
10
|
+
maxLength?: number;
|
|
11
|
+
/** Max items to keep when slicing arrays (default: 10) */
|
|
12
|
+
arraySliceSize?: number;
|
|
13
|
+
/** Max nesting depth before pruning (default: 4) */
|
|
14
|
+
maxDepth?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Apply JMESPath transform to parsed JSON data.
|
|
18
|
+
* Dynamically imports jmespath to keep it optional.
|
|
19
|
+
*/
|
|
20
|
+
export declare function applyJmesPath(data: unknown, expression: string): Promise<unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Smart truncation that preserves structure instead of hard-cutting text.
|
|
23
|
+
* - Arrays: keep first N items + metadata
|
|
24
|
+
* - Deep objects: prune beyond max depth
|
|
25
|
+
* - Large strings: truncate with indicator
|
|
26
|
+
*/
|
|
27
|
+
export declare function smartTruncate(data: unknown, options?: TransformOptions): string;
|
|
28
|
+
/**
|
|
29
|
+
* Match a tool name against a pattern (supports * glob).
|
|
30
|
+
*/
|
|
31
|
+
export declare function matchTransformPattern(toolName: string, pattern: string): boolean;
|
|
32
|
+
/**
|
|
33
|
+
* Find the matching transform expression for a tool name.
|
|
34
|
+
*/
|
|
35
|
+
export declare function findTransform(toolName: string, transforms: Record<string, string>): string | undefined;
|
|
36
|
+
//# sourceMappingURL=response-transform.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-transform.d.ts","sourceRoot":"","sources":["../../../src/executor/response-transform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,gBAAgB;IAChC,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gDAAgD;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,0DAA0D;IAC1D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD;;;GAGG;AACH,wBAAsB,aAAa,CAClC,IAAI,EAAE,OAAO,EACb,UAAU,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC5B,IAAI,EAAE,OAAO,EACb,OAAO,GAAE,gBAAqB,GAC5B,MAAM,CAcR;AA0DD;;GAEG;AACH,wBAAgB,qBAAqB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACb,OAAO,CAQT;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC5B,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,GAAG,SAAS,CAYpB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Smart response transformation for Pro tier.
|
|
3
|
+
* - JMESPath transforms: filter API responses to relevant fields
|
|
4
|
+
* - Smart truncation: array slicing with metadata instead of hard cut
|
|
5
|
+
*/
|
|
6
|
+
const DEFAULT_MAX_LENGTH = 50_000;
|
|
7
|
+
const DEFAULT_ARRAY_SLICE = 10;
|
|
8
|
+
const DEFAULT_MAX_DEPTH = 4;
|
|
9
|
+
/**
|
|
10
|
+
* Apply JMESPath transform to parsed JSON data.
|
|
11
|
+
* Dynamically imports jmespath to keep it optional.
|
|
12
|
+
*/
|
|
13
|
+
export async function applyJmesPath(data, expression) {
|
|
14
|
+
const jmespath = await import("@metrichor/jmespath");
|
|
15
|
+
return jmespath.search(data, expression);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Smart truncation that preserves structure instead of hard-cutting text.
|
|
19
|
+
* - Arrays: keep first N items + metadata
|
|
20
|
+
* - Deep objects: prune beyond max depth
|
|
21
|
+
* - Large strings: truncate with indicator
|
|
22
|
+
*/
|
|
23
|
+
export function smartTruncate(data, options = {}) {
|
|
24
|
+
const maxLength = options.maxLength ?? DEFAULT_MAX_LENGTH;
|
|
25
|
+
const arraySlice = options.arraySliceSize ?? DEFAULT_ARRAY_SLICE;
|
|
26
|
+
const maxDepth = options.maxDepth ?? DEFAULT_MAX_DEPTH;
|
|
27
|
+
const pruned = pruneData(data, arraySlice, maxDepth, 0);
|
|
28
|
+
const result = JSON.stringify(pruned, null, 2);
|
|
29
|
+
// Final safety net: if still too long after pruning, hard truncate
|
|
30
|
+
if (result.length > maxLength) {
|
|
31
|
+
return `${result.slice(0, maxLength)}\n\n... [truncated, ${result.length - maxLength} characters omitted]`;
|
|
32
|
+
}
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
function pruneData(data, arraySlice, maxDepth, currentDepth) {
|
|
36
|
+
if (data === null || data === undefined)
|
|
37
|
+
return data;
|
|
38
|
+
if (typeof data !== "object")
|
|
39
|
+
return data;
|
|
40
|
+
// Array: slice + metadata
|
|
41
|
+
if (Array.isArray(data)) {
|
|
42
|
+
if (data.length > arraySlice) {
|
|
43
|
+
const sliced = data
|
|
44
|
+
.slice(0, arraySlice)
|
|
45
|
+
.map((item) => pruneData(item, arraySlice, maxDepth, currentDepth + 1));
|
|
46
|
+
return [
|
|
47
|
+
...sliced,
|
|
48
|
+
{
|
|
49
|
+
_meta: `showing ${arraySlice} of ${data.length} items. Use pagination or offset parameters to retrieve more.`,
|
|
50
|
+
},
|
|
51
|
+
];
|
|
52
|
+
}
|
|
53
|
+
return data.map((item) => pruneData(item, arraySlice, maxDepth, currentDepth + 1));
|
|
54
|
+
}
|
|
55
|
+
// Object at max depth: summarize keys
|
|
56
|
+
if (currentDepth >= maxDepth) {
|
|
57
|
+
const keys = Object.keys(data);
|
|
58
|
+
const record = data;
|
|
59
|
+
const summary = {};
|
|
60
|
+
for (const key of keys) {
|
|
61
|
+
const val = record[key];
|
|
62
|
+
if (Array.isArray(val)) {
|
|
63
|
+
summary[key] = `[array(${val.length})]`;
|
|
64
|
+
}
|
|
65
|
+
else if (typeof val === "object" && val !== null) {
|
|
66
|
+
summary[key] = `[object(${Object.keys(val).length} keys)]`;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
summary[key] = String(val);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return summary;
|
|
73
|
+
}
|
|
74
|
+
// Object: recurse
|
|
75
|
+
const record = data;
|
|
76
|
+
const result = {};
|
|
77
|
+
for (const [key, value] of Object.entries(record)) {
|
|
78
|
+
result[key] = pruneData(value, arraySlice, maxDepth, currentDepth + 1);
|
|
79
|
+
}
|
|
80
|
+
return result;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Match a tool name against a pattern (supports * glob).
|
|
84
|
+
*/
|
|
85
|
+
export function matchTransformPattern(toolName, pattern) {
|
|
86
|
+
if (pattern.includes("*")) {
|
|
87
|
+
const regex = new RegExp(`^${pattern.replace(/\*/g, ".*")}$`);
|
|
88
|
+
return regex.test(toolName);
|
|
89
|
+
}
|
|
90
|
+
return toolName === pattern;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Find the matching transform expression for a tool name.
|
|
94
|
+
*/
|
|
95
|
+
export function findTransform(toolName, transforms) {
|
|
96
|
+
// Exact match first
|
|
97
|
+
if (transforms[toolName])
|
|
98
|
+
return transforms[toolName];
|
|
99
|
+
// Glob pattern match
|
|
100
|
+
for (const [pattern, expression] of Object.entries(transforms)) {
|
|
101
|
+
if (matchTransformPattern(toolName, pattern)) {
|
|
102
|
+
return expression;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=response-transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"response-transform.js","sourceRoot":"","sources":["../../../src/executor/response-transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.d.ts","sourceRoot":"","sources":["../../../src/licensing/gate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI1D,wBAAgB,UAAU,CACzB,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,OAAO,EAAE,UAAU,GACjB,IAAI,CAIN"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/licensing/gate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,UAAU,UAAU,CACzB,OAA2B,EAC3B,OAAmB;IAEnB,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,eAAe,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/licensing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACzD,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/licensing/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare enum ProFeature {
|
|
2
|
+
MULTI_API = "multi-api",
|
|
3
|
+
SMART_RESPONSE = "smart-response",
|
|
4
|
+
CUSTOM_TRANSFORMS = "custom-transforms",
|
|
5
|
+
ANALYTICS = "analytics"
|
|
6
|
+
}
|
|
7
|
+
export interface LicenseInfo {
|
|
8
|
+
email: string;
|
|
9
|
+
features: ProFeature[];
|
|
10
|
+
expiresAt: string;
|
|
11
|
+
sig: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class ProFeatureError extends Error {
|
|
14
|
+
constructor(feature: ProFeature);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/licensing/types.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACrB,SAAS,cAAc;IACvB,cAAc,mBAAmB;IACjC,iBAAiB,sBAAsB;IACvC,SAAS,cAAc;CACvB;AAED,MAAM,WAAW,WAAW;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,qBAAa,eAAgB,SAAQ,KAAK;gBAC7B,OAAO,EAAE,UAAU;CAM/B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export var ProFeature;
|
|
2
|
+
(function (ProFeature) {
|
|
3
|
+
ProFeature["MULTI_API"] = "multi-api";
|
|
4
|
+
ProFeature["SMART_RESPONSE"] = "smart-response";
|
|
5
|
+
ProFeature["CUSTOM_TRANSFORMS"] = "custom-transforms";
|
|
6
|
+
ProFeature["ANALYTICS"] = "analytics";
|
|
7
|
+
})(ProFeature || (ProFeature = {}));
|
|
8
|
+
export class ProFeatureError extends Error {
|
|
9
|
+
constructor(feature) {
|
|
10
|
+
super(`Pro feature "${feature}" requires a license key. Get one at https://github.com/Docat0209/mcp-openapi#pro`);
|
|
11
|
+
this.name = "ProFeatureError";
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/licensing/types.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,UAKX;AALD,WAAY,UAAU;IACrB,qCAAuB,CAAA;IACvB,+CAAiC,CAAA;IACjC,qDAAuC,CAAA;IACvC,qCAAuB,CAAA;AACxB,CAAC,EALW,UAAU,KAAV,UAAU,QAKrB;AASD,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACzC,YAAY,OAAmB;QAC9B,KAAK,CACJ,gBAAgB,OAAO,mFAAmF,CAC1G,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAC/B,CAAC;CACD"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { LicenseInfo, ProFeature } from "./types.js";
|
|
2
|
+
export declare function validateLicense(licenseKey: string): LicenseInfo | null;
|
|
3
|
+
export declare function hasFeature(license: LicenseInfo | null, feature: ProFeature): boolean;
|
|
4
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/licensing/validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAO1D,wBAAgB,eAAe,CAC9B,UAAU,EAAE,MAAM,GAChB,WAAW,GAAG,IAAI,CA6BpB;AAED,wBAAgB,UAAU,CACzB,OAAO,EAAE,WAAW,GAAG,IAAI,EAC3B,OAAO,EAAE,UAAU,GACjB,OAAO,CAGT"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { createVerify } from "node:crypto";
|
|
2
|
+
// Ed25519 public key for license verification
|
|
3
|
+
// Private key is kept in Lemon Squeezy webhook handler only
|
|
4
|
+
const PUBLIC_KEY = "MCowBQYDK2VwAyEAPlaceholderKeyWillBeReplacedBeforeFirstProRelease=";
|
|
5
|
+
export function validateLicense(licenseKey) {
|
|
6
|
+
try {
|
|
7
|
+
const decoded = Buffer.from(licenseKey, "base64").toString("utf-8");
|
|
8
|
+
const payload = JSON.parse(decoded);
|
|
9
|
+
// Check expiry
|
|
10
|
+
if (new Date(payload.expiresAt) < new Date()) {
|
|
11
|
+
return null;
|
|
12
|
+
}
|
|
13
|
+
// Verify signature
|
|
14
|
+
const dataToVerify = JSON.stringify({
|
|
15
|
+
email: payload.email,
|
|
16
|
+
features: payload.features,
|
|
17
|
+
expiresAt: payload.expiresAt,
|
|
18
|
+
});
|
|
19
|
+
const verify = createVerify("Ed25519");
|
|
20
|
+
verify.update(dataToVerify);
|
|
21
|
+
const isValid = verify.verify(`-----BEGIN PUBLIC KEY-----\n${PUBLIC_KEY}\n-----END PUBLIC KEY-----`, payload.sig, "hex");
|
|
22
|
+
return isValid ? payload : null;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function hasFeature(license, feature) {
|
|
29
|
+
if (!license)
|
|
30
|
+
return false;
|
|
31
|
+
return license.features.includes(feature);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../../src/licensing/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,8CAA8C;AAC9C,4DAA4D;AAC5D,MAAM,UAAU,GACf,oEAAoE,CAAC;AAEtE,MAAM,UAAU,eAAe,CAC9B,UAAkB;IAElB,IAAI,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAgB,CAAC;QAEnD,eAAe;QACf,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,IAAI,CAAC;QACb,CAAC;QAED,mBAAmB;QACnB,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;YACnC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAC5B,+BAA+B,UAAU,4BAA4B,EACrE,OAAO,CAAC,GAAG,EACX,KAAK,CACL,CAAC;QAEF,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;IACjC,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAC;IACb,CAAC;AACF,CAAC;AAED,MAAM,UAAU,UAAU,CACzB,OAA2B,EAC3B,OAAmB;IAEnB,IAAI,CAAC,OAAO;QAAE,OAAO,KAAK,CAAC;IAC3B,OAAO,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3C,CAAC"}
|
package/dist/src/server.d.ts
CHANGED
|
@@ -1,8 +1,42 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
2
|
import type { McpOpenApiConfig } from "./config/types.js";
|
|
3
|
+
import type { GeneratedTool } from "./generator/tool-generator.js";
|
|
3
4
|
export declare function createServer(config: McpOpenApiConfig): Promise<{
|
|
4
|
-
server:
|
|
5
|
-
|
|
5
|
+
server: Server<{
|
|
6
|
+
method: string;
|
|
7
|
+
params?: {
|
|
8
|
+
[x: string]: unknown;
|
|
9
|
+
_meta?: {
|
|
10
|
+
[x: string]: unknown;
|
|
11
|
+
progressToken?: string | number | undefined;
|
|
12
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
13
|
+
taskId: string;
|
|
14
|
+
} | undefined;
|
|
15
|
+
} | undefined;
|
|
16
|
+
} | undefined;
|
|
17
|
+
}, {
|
|
18
|
+
method: string;
|
|
19
|
+
params?: {
|
|
20
|
+
[x: string]: unknown;
|
|
21
|
+
_meta?: {
|
|
22
|
+
[x: string]: unknown;
|
|
23
|
+
progressToken?: string | number | undefined;
|
|
24
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
25
|
+
taskId: string;
|
|
26
|
+
} | undefined;
|
|
27
|
+
} | undefined;
|
|
28
|
+
} | undefined;
|
|
29
|
+
}, {
|
|
30
|
+
[x: string]: unknown;
|
|
31
|
+
_meta?: {
|
|
32
|
+
[x: string]: unknown;
|
|
33
|
+
progressToken?: string | number | undefined;
|
|
34
|
+
"io.modelcontextprotocol/related-task"?: {
|
|
35
|
+
taskId: string;
|
|
36
|
+
} | undefined;
|
|
37
|
+
} | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
tools: GeneratedTool[];
|
|
6
40
|
spec: import("./index.js").NormalizedSpec;
|
|
7
41
|
}>;
|
|
8
42
|
export declare function startServer(config: McpOpenApiConfig): Promise<void>;
|
package/dist/src/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAOnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAU1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAUnE,wBAAsB,YAAY,CAAC,MAAM,EAAE,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoH1D;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,gBAAgB,iBAOzD"}
|
package/dist/src/server.js
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
2
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
3
4
|
import { createAuthProvider } from "./auth/index.js";
|
|
4
5
|
import { DEFAULT_CONFIG } from "./config/types.js";
|
|
5
6
|
import { buildRequest } from "./executor/request-builder.js";
|
|
6
7
|
import { executeRequest } from "./executor/http-client.js";
|
|
7
|
-
import { mapResponse } from "./executor/response-mapper.js";
|
|
8
|
+
import { mapResponse, } from "./executor/response-mapper.js";
|
|
9
|
+
import { findTransform } from "./executor/response-transform.js";
|
|
8
10
|
import { generateTools } from "./generator/tool-generator.js";
|
|
11
|
+
import { validateLicense, hasFeature, ProFeature, } from "./licensing/index.js";
|
|
9
12
|
import { parseSpec } from "./parser/openapi-parser.js";
|
|
10
13
|
import { logger } from "./utils/logger.js";
|
|
11
14
|
export async function createServer(config) {
|
|
12
15
|
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
16
|
+
// Validate license key if provided
|
|
17
|
+
let license = null;
|
|
18
|
+
if (mergedConfig.licenseKey) {
|
|
19
|
+
license = validateLicense(mergedConfig.licenseKey);
|
|
20
|
+
if (license) {
|
|
21
|
+
logger.info(`Pro license active for ${license.email}`);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
logger.warn("Invalid or expired license key — Pro features disabled");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
13
27
|
// Parse the OpenAPI spec
|
|
14
28
|
const spec = await parseSpec(config.spec);
|
|
15
29
|
// Generate MCP tools
|
|
@@ -24,31 +38,70 @@ export async function createServer(config) {
|
|
|
24
38
|
}
|
|
25
39
|
// Create auth provider
|
|
26
40
|
const authProvider = createAuthProvider(mergedConfig.auth);
|
|
27
|
-
//
|
|
28
|
-
const
|
|
41
|
+
// Build tool lookup
|
|
42
|
+
const toolMap = new Map();
|
|
43
|
+
for (const tool of tools) {
|
|
44
|
+
toolMap.set(tool.name, tool);
|
|
45
|
+
}
|
|
46
|
+
// Create MCP server using low-level API
|
|
47
|
+
const server = new Server({
|
|
29
48
|
name: `mcp-openapi: ${spec.info.title}`,
|
|
30
49
|
version: spec.info.version,
|
|
50
|
+
}, {
|
|
51
|
+
capabilities: {
|
|
52
|
+
tools: {},
|
|
53
|
+
},
|
|
31
54
|
});
|
|
32
|
-
//
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
:
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
55
|
+
// Handle list tools
|
|
56
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
57
|
+
tools: tools.map((t) => ({
|
|
58
|
+
name: t.name,
|
|
59
|
+
description: t.description,
|
|
60
|
+
inputSchema: {
|
|
61
|
+
type: "object",
|
|
62
|
+
properties: t.inputSchema.properties ?? {},
|
|
63
|
+
...(t.inputSchema.required ? { required: t.inputSchema.required } : {}),
|
|
64
|
+
},
|
|
65
|
+
})),
|
|
66
|
+
}));
|
|
67
|
+
// Handle call tool
|
|
68
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
69
|
+
const tool = toolMap.get(request.params.name);
|
|
70
|
+
if (!tool) {
|
|
71
|
+
return {
|
|
72
|
+
content: [{ type: "text", text: `Unknown tool: ${request.params.name}` }],
|
|
73
|
+
isError: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
const args = (request.params.arguments ?? {});
|
|
77
|
+
// Build HTTP request from tool call args
|
|
78
|
+
let httpRequest = buildRequest(args, tool.endpointRef, mergedConfig.headers);
|
|
79
|
+
// Apply auth
|
|
80
|
+
if (authProvider) {
|
|
81
|
+
httpRequest = await authProvider.apply(httpRequest);
|
|
82
|
+
}
|
|
83
|
+
// Execute HTTP request
|
|
84
|
+
const response = await executeRequest(httpRequest, {
|
|
85
|
+
timeout: mergedConfig.timeout,
|
|
86
|
+
maxRetries: mergedConfig.maxRetries,
|
|
50
87
|
});
|
|
51
|
-
|
|
88
|
+
// Build response mapping options
|
|
89
|
+
const mapOptions = {};
|
|
90
|
+
// Pro: Custom JMESPath transforms
|
|
91
|
+
if (mergedConfig.transforms && hasFeature(license, ProFeature.CUSTOM_TRANSFORMS)) {
|
|
92
|
+
const expr = findTransform(request.params.name, mergedConfig.transforms);
|
|
93
|
+
if (expr) {
|
|
94
|
+
mapOptions.jmesPath = expr;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Pro: Smart response handling
|
|
98
|
+
if (hasFeature(license, ProFeature.SMART_RESPONSE) && mergedConfig.response) {
|
|
99
|
+
mapOptions.smartTruncation = mergedConfig.response;
|
|
100
|
+
}
|
|
101
|
+
// Map to MCP result
|
|
102
|
+
const result = await mapResponse(response, mapOptions);
|
|
103
|
+
return { ...result };
|
|
104
|
+
});
|
|
52
105
|
logger.info(`Registered ${tools.length} tools from ${spec.info.title} v${spec.info.version}`);
|
|
53
106
|
return { server, tools, spec };
|
|
54
107
|
}
|
package/dist/src/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mcp-openapi",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "LLM-aware OpenAPI/Swagger to MCP tools converter. Point at any API spec, get instant MCP tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -22,15 +22,16 @@
|
|
|
22
22
|
"prepublishOnly": "pnpm build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
26
25
|
"@apidevtools/swagger-parser": "^10.1.0",
|
|
27
|
-
"
|
|
28
|
-
"
|
|
26
|
+
"@metrichor/jmespath": "^0.3.1",
|
|
27
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
28
|
+
"openapi-types": "^12.1.3",
|
|
29
|
+
"yaml": "^2.6.0"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
32
|
+
"@types/node": "^22.0.0",
|
|
31
33
|
"typescript": "^5.7.0",
|
|
32
|
-
"vitest": "^3.0.0"
|
|
33
|
-
"@types/node": "^22.0.0"
|
|
34
|
+
"vitest": "^3.0.0"
|
|
34
35
|
},
|
|
35
36
|
"engines": {
|
|
36
37
|
"node": ">=18.0.0"
|
|
@@ -46,9 +47,9 @@
|
|
|
46
47
|
"tools"
|
|
47
48
|
],
|
|
48
49
|
"license": "MIT",
|
|
50
|
+
"homepage": "https://github.com/Docat0209/mcp-openapi#readme",
|
|
49
51
|
"repository": {
|
|
50
52
|
"type": "git",
|
|
51
|
-
"url": "https://github.com/Docat0209/
|
|
52
|
-
"directory": "packages/mcp-servers/openapi"
|
|
53
|
+
"url": "https://github.com/Docat0209/mcp-openapi"
|
|
53
54
|
}
|
|
54
55
|
}
|