mcp4openapi 0.3.1 → 0.3.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.
Files changed (160) hide show
  1. package/README.md +7 -0
  2. package/dist/src/auth/oauth-provider.d.ts +1 -0
  3. package/dist/src/auth/oauth-provider.d.ts.map +1 -1
  4. package/dist/src/auth/oauth-provider.js +17 -0
  5. package/dist/src/auth/oauth-provider.js.map +1 -1
  6. package/dist/src/core/cli-config.d.ts.map +1 -1
  7. package/dist/src/core/cli-config.js +2 -0
  8. package/dist/src/core/cli-config.js.map +1 -1
  9. package/dist/src/core/index.d.ts.map +1 -1
  10. package/dist/src/core/index.js +18 -3
  11. package/dist/src/core/index.js.map +1 -1
  12. package/dist/src/index.js +0 -0
  13. package/dist/src/profile/profile-allowlist.d.ts +18 -0
  14. package/dist/src/profile/profile-allowlist.d.ts.map +1 -0
  15. package/dist/src/profile/profile-allowlist.js +68 -0
  16. package/dist/src/profile/profile-allowlist.js.map +1 -0
  17. package/dist/src/profile/profile-registry.d.ts +5 -0
  18. package/dist/src/profile/profile-registry.d.ts.map +1 -1
  19. package/dist/src/profile/profile-registry.js +38 -14
  20. package/dist/src/profile/profile-registry.js.map +1 -1
  21. package/dist/src/security/ssrf-validator.d.ts +31 -0
  22. package/dist/src/security/ssrf-validator.d.ts.map +1 -0
  23. package/dist/src/security/ssrf-validator.js +190 -0
  24. package/dist/src/security/ssrf-validator.js.map +1 -0
  25. package/package.json +2 -2
  26. package/profiles/gitlab/developer-profile-oauth.json +445 -81
  27. package/profiles/gitlab/developer-profile-oauth.test.json +1037 -12
  28. package/profiles/gitlab/openapi.yaml +1420 -165
  29. package/profiles/gitlab/profile-optimized-oauth.json +928 -0
  30. package/profiles/gitlab/profile-optimized-oauth.test.json +1606 -0
  31. package/profiles/grafana/openapi.json +28078 -0
  32. package/profiles/grafana/profile.json +1083 -0
  33. package/profiles/grafana/profile.test.json +235 -0
  34. package/profiles/mattermost/openapi.yaml +27434 -0
  35. package/profiles/mattermost/profile.json +463 -0
  36. package/profiles/mattermost/profile.test.json +607 -0
  37. package/profiles/n8n/profile-optimized.json +1002 -364
  38. package/profiles/n8n/profile-optimized.test.json +43 -43
  39. package/dist/src/argument-normalizer.d.ts +0 -5
  40. package/dist/src/argument-normalizer.d.ts.map +0 -1
  41. package/dist/src/argument-normalizer.js +0 -61
  42. package/dist/src/argument-normalizer.js.map +0 -1
  43. package/dist/src/cli-config.d.ts +0 -9
  44. package/dist/src/cli-config.d.ts.map +0 -1
  45. package/dist/src/cli-config.js +0 -111
  46. package/dist/src/cli-config.js.map +0 -1
  47. package/dist/src/composite-executor.d.ts +0 -77
  48. package/dist/src/composite-executor.d.ts.map +0 -1
  49. package/dist/src/composite-executor.js +0 -193
  50. package/dist/src/composite-executor.js.map +0 -1
  51. package/dist/src/constants.d.ts +0 -85
  52. package/dist/src/constants.d.ts.map +0 -1
  53. package/dist/src/constants.js +0 -85
  54. package/dist/src/constants.js.map +0 -1
  55. package/dist/src/dag-executor.d.ts +0 -49
  56. package/dist/src/dag-executor.d.ts.map +0 -1
  57. package/dist/src/dag-executor.js +0 -138
  58. package/dist/src/dag-executor.js.map +0 -1
  59. package/dist/src/errors.d.ts +0 -59
  60. package/dist/src/errors.d.ts.map +0 -1
  61. package/dist/src/errors.js +0 -119
  62. package/dist/src/errors.js.map +0 -1
  63. package/dist/src/filtering.d.ts +0 -19
  64. package/dist/src/filtering.d.ts.map +0 -1
  65. package/dist/src/filtering.js +0 -292
  66. package/dist/src/filtering.js.map +0 -1
  67. package/dist/src/http-client-factory.d.ts +0 -62
  68. package/dist/src/http-client-factory.d.ts.map +0 -1
  69. package/dist/src/http-client-factory.js +0 -133
  70. package/dist/src/http-client-factory.js.map +0 -1
  71. package/dist/src/http-transport-config.d.ts +0 -6
  72. package/dist/src/http-transport-config.d.ts.map +0 -1
  73. package/dist/src/http-transport-config.js +0 -47
  74. package/dist/src/http-transport-config.js.map +0 -1
  75. package/dist/src/http-transport.d.ts +0 -316
  76. package/dist/src/http-transport.d.ts.map +0 -1
  77. package/dist/src/http-transport.js +0 -2412
  78. package/dist/src/http-transport.js.map +0 -1
  79. package/dist/src/interceptors.d.ts +0 -116
  80. package/dist/src/interceptors.d.ts.map +0 -1
  81. package/dist/src/interceptors.js +0 -392
  82. package/dist/src/interceptors.js.map +0 -1
  83. package/dist/src/jsonrpc-validator.d.ts +0 -27
  84. package/dist/src/jsonrpc-validator.d.ts.map +0 -1
  85. package/dist/src/jsonrpc-validator.js +0 -58
  86. package/dist/src/jsonrpc-validator.js.map +0 -1
  87. package/dist/src/logger.d.ts +0 -59
  88. package/dist/src/logger.d.ts.map +0 -1
  89. package/dist/src/logger.js +0 -177
  90. package/dist/src/logger.js.map +0 -1
  91. package/dist/src/mcp-server-manager.d.ts +0 -20
  92. package/dist/src/mcp-server-manager.d.ts.map +0 -1
  93. package/dist/src/mcp-server-manager.js +0 -38
  94. package/dist/src/mcp-server-manager.js.map +0 -1
  95. package/dist/src/mcp-server.d.ts +0 -203
  96. package/dist/src/mcp-server.d.ts.map +0 -1
  97. package/dist/src/mcp-server.js +0 -1369
  98. package/dist/src/mcp-server.js.map +0 -1
  99. package/dist/src/metrics.d.ts +0 -97
  100. package/dist/src/metrics.d.ts.map +0 -1
  101. package/dist/src/metrics.js +0 -273
  102. package/dist/src/metrics.js.map +0 -1
  103. package/dist/src/naming-warnings.d.ts +0 -23
  104. package/dist/src/naming-warnings.d.ts.map +0 -1
  105. package/dist/src/naming-warnings.js +0 -83
  106. package/dist/src/naming-warnings.js.map +0 -1
  107. package/dist/src/naming.d.ts +0 -58
  108. package/dist/src/naming.d.ts.map +0 -1
  109. package/dist/src/naming.js +0 -510
  110. package/dist/src/naming.js.map +0 -1
  111. package/dist/src/oauth-provider.d.ts +0 -131
  112. package/dist/src/oauth-provider.d.ts.map +0 -1
  113. package/dist/src/oauth-provider.js +0 -836
  114. package/dist/src/oauth-provider.js.map +0 -1
  115. package/dist/src/openapi-parser.d.ts +0 -70
  116. package/dist/src/openapi-parser.d.ts.map +0 -1
  117. package/dist/src/openapi-parser.js +0 -436
  118. package/dist/src/openapi-parser.js.map +0 -1
  119. package/dist/src/profile-loader.d.ts +0 -78
  120. package/dist/src/profile-loader.d.ts.map +0 -1
  121. package/dist/src/profile-loader.js +0 -483
  122. package/dist/src/profile-loader.js.map +0 -1
  123. package/dist/src/profile-registry.d.ts +0 -18
  124. package/dist/src/profile-registry.d.ts.map +0 -1
  125. package/dist/src/profile-registry.js +0 -26
  126. package/dist/src/profile-registry.js.map +0 -1
  127. package/dist/src/profile-resolver.d.ts +0 -19
  128. package/dist/src/profile-resolver.d.ts.map +0 -1
  129. package/dist/src/profile-resolver.js +0 -167
  130. package/dist/src/profile-resolver.js.map +0 -1
  131. package/dist/src/proxy-executor.d.ts +0 -86
  132. package/dist/src/proxy-executor.d.ts.map +0 -1
  133. package/dist/src/proxy-executor.js +0 -497
  134. package/dist/src/proxy-executor.js.map +0 -1
  135. package/dist/src/schema-validator.d.ts +0 -30
  136. package/dist/src/schema-validator.d.ts.map +0 -1
  137. package/dist/src/schema-validator.js +0 -128
  138. package/dist/src/schema-validator.js.map +0 -1
  139. package/dist/src/startup-profile.d.ts +0 -17
  140. package/dist/src/startup-profile.d.ts.map +0 -1
  141. package/dist/src/startup-profile.js +0 -30
  142. package/dist/src/startup-profile.js.map +0 -1
  143. package/dist/src/startup-validation.d.ts +0 -11
  144. package/dist/src/startup-validation.d.ts.map +0 -1
  145. package/dist/src/startup-validation.js +0 -21
  146. package/dist/src/startup-validation.js.map +0 -1
  147. package/dist/src/tool-filter.d.ts +0 -65
  148. package/dist/src/tool-filter.d.ts.map +0 -1
  149. package/dist/src/tool-filter.js +0 -471
  150. package/dist/src/tool-filter.js.map +0 -1
  151. package/dist/src/tool-generator.d.ts +0 -67
  152. package/dist/src/tool-generator.d.ts.map +0 -1
  153. package/dist/src/tool-generator.js +0 -182
  154. package/dist/src/tool-generator.js.map +0 -1
  155. package/dist/src/validation-utils.d.ts +0 -49
  156. package/dist/src/validation-utils.d.ts.map +0 -1
  157. package/dist/src/validation-utils.js +0 -138
  158. package/dist/src/validation-utils.js.map +0 -1
  159. package/profiles/gitlab/developer-profile.json +0 -1508
  160. package/profiles/gitlab/developer-profile.test.json +0 -3432
@@ -0,0 +1,31 @@
1
+ import type { Logger } from '../core/logger.js';
2
+ export interface SSRFOptions {
3
+ /**
4
+ * Allow connections to private/loopback/link-local IP addresses.
5
+ * Default: false
6
+ */
7
+ allowPrivateNetwork?: boolean;
8
+ /**
9
+ * Whitelist of allowed hostnames (supports *.example.com wildcards).
10
+ * If provided, only hosts matching the whitelist are allowed.
11
+ */
12
+ allowedHosts?: string[];
13
+ }
14
+ /**
15
+ * Validates URLs to prevent Server-Side Request Forgery (SSRF) attacks.
16
+ * Checks against private IP ranges and DNS resolution.
17
+ */
18
+ export declare class SSRFValidator {
19
+ private logger;
20
+ constructor(logger: Logger);
21
+ /**
22
+ * Validate a URL against SSRF rules.
23
+ * Throws ValidationError if the URL is not allowed.
24
+ */
25
+ validate(url: string, options?: SSRFOptions): Promise<void>;
26
+ private lookupAllIpAddresses;
27
+ private isAllowedHost;
28
+ private isDisallowedIPv4;
29
+ private isDisallowedIPv6;
30
+ }
31
+ //# sourceMappingURL=ssrf-validator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf-validator.d.ts","sourceRoot":"","sources":["../../../src/security/ssrf-validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAElC;;;OAGG;IACG,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAmEvD,oBAAoB;IA6BlC,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,gBAAgB;CAqDzB"}
@@ -0,0 +1,190 @@
1
+ import { isIP } from 'node:net';
2
+ import { lookup } from 'node:dns/promises';
3
+ import { ValidationError } from '../core/errors.js';
4
+ /**
5
+ * Validates URLs to prevent Server-Side Request Forgery (SSRF) attacks.
6
+ * Checks against private IP ranges and DNS resolution.
7
+ */
8
+ export class SSRFValidator {
9
+ constructor(logger) {
10
+ this.logger = logger;
11
+ }
12
+ /**
13
+ * Validate a URL against SSRF rules.
14
+ * Throws ValidationError if the URL is not allowed.
15
+ */
16
+ async validate(url, options = {}) {
17
+ const parsedUrl = new URL(url);
18
+ const hostnameRaw = parsedUrl.hostname.toLowerCase();
19
+ // Remove brackets from IPv6 literals for checking
20
+ const hostname = hostnameRaw.startsWith('[') && hostnameRaw.endsWith(']')
21
+ ? hostnameRaw.slice(1, -1)
22
+ : hostnameRaw;
23
+ // 1. Check allowed hosts whitelist if configured
24
+ if (options.allowedHosts && options.allowedHosts.length > 0) {
25
+ if (!this.isAllowedHost(hostname, options.allowedHosts)) {
26
+ this.logger.warn('SSRF blocked: host not in allowlist', {
27
+ hostname,
28
+ allowed_hosts: options.allowedHosts,
29
+ });
30
+ throw new ValidationError(`Host not in allowlist: '${hostname}'`);
31
+ }
32
+ }
33
+ // If private networks are allowed, we can stop checks here unless specific logic is needed.
34
+ // However, usually we still want to block metadata services if not explicitly allowed,
35
+ // but the current requirement is mainly about private network access.
36
+ if (options.allowPrivateNetwork) {
37
+ return;
38
+ }
39
+ // 2. Check localhost/loopback/private IPs explicitly
40
+ if (hostname === 'localhost') {
41
+ this.logger.warn('SSRF blocked: localhost target', { hostname });
42
+ throw new ValidationError('Hostname not allowed (localhost)');
43
+ }
44
+ const ipVersion = isIP(hostname);
45
+ if (ipVersion === 4) {
46
+ if (this.isDisallowedIPv4(hostname)) {
47
+ this.logger.warn('SSRF blocked: private/loopback/link-local IPv4 target', { hostname });
48
+ throw new ValidationError('IP address not allowed');
49
+ }
50
+ }
51
+ else if (ipVersion === 6) {
52
+ if (this.isDisallowedIPv6(hostname)) {
53
+ this.logger.warn('SSRF blocked: private/loopback/link-local IPv6 target', { hostname });
54
+ throw new ValidationError('IP address not allowed');
55
+ }
56
+ }
57
+ else {
58
+ // 3. DNS resolution check
59
+ // Hostname: resolve to all IPs and block if any are private/loopback/link-local
60
+ const addresses = await this.lookupAllIpAddresses(hostname);
61
+ const disallowed = addresses.find(address => {
62
+ const family = isIP(address);
63
+ if (family === 4)
64
+ return this.isDisallowedIPv4(address);
65
+ if (family === 6)
66
+ return this.isDisallowedIPv6(address);
67
+ return false;
68
+ });
69
+ if (disallowed) {
70
+ this.logger.warn('SSRF blocked: hostname resolves to private/loopback/link-local IP', {
71
+ hostname,
72
+ resolved_addresses: addresses,
73
+ });
74
+ throw new ValidationError('Hostname resolves to disallowed IP');
75
+ }
76
+ }
77
+ }
78
+ async lookupAllIpAddresses(hostname) {
79
+ const timeoutMs = 2000; // Increased to 2s to be safe
80
+ let results = [];
81
+ try {
82
+ results = (await Promise.race([
83
+ lookup(hostname, { all: true, verbatim: true }),
84
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`DNS lookup timeout after ${timeoutMs}ms`)), timeoutMs)),
85
+ ]));
86
+ }
87
+ catch (error) {
88
+ this.logger.warn('SSRF blocked: DNS lookup failed', {
89
+ hostname,
90
+ error: error instanceof Error ? error.message : String(error),
91
+ });
92
+ // Fail secure: if we can't resolve it, we can't verify it's safe.
93
+ throw new ValidationError(`DNS lookup failed for hostname '${hostname}'`);
94
+ }
95
+ const addresses = results.map(r => r.address).filter(Boolean);
96
+ if (addresses.length === 0) {
97
+ this.logger.warn('SSRF blocked: DNS lookup returned no addresses', { hostname });
98
+ throw new ValidationError(`DNS lookup returned no addresses for hostname '${hostname}'`);
99
+ }
100
+ return addresses;
101
+ }
102
+ isAllowedHost(hostname, allowedHosts) {
103
+ const lower = hostname.toLowerCase();
104
+ return allowedHosts.some(patternRaw => {
105
+ const pattern = patternRaw.toLowerCase().trim();
106
+ if (!pattern)
107
+ return false;
108
+ if (pattern.startsWith('*.')) {
109
+ const suffix = pattern.slice(2);
110
+ if (!suffix)
111
+ return false;
112
+ return lower.endsWith(`.${suffix}`);
113
+ }
114
+ return lower === pattern;
115
+ });
116
+ }
117
+ isDisallowedIPv4(ip) {
118
+ const parts = ip.split('.').map(p => Number(p));
119
+ if (parts.length !== 4 || parts.some(p => !Number.isInteger(p) || p < 0 || p > 255))
120
+ return true;
121
+ const [a, b] = parts;
122
+ if (a === 127)
123
+ return true; // loopback
124
+ if (a === 10)
125
+ return true; // private
126
+ if (a === 172 && b >= 16 && b <= 31)
127
+ return true; // private
128
+ if (a === 192 && b === 168)
129
+ return true; // private
130
+ if (a === 169 && b === 254)
131
+ return true; // link-local
132
+ if (a === 0)
133
+ return true; // "this network"
134
+ return false;
135
+ }
136
+ isDisallowedIPv6(ip) {
137
+ const normalized = ip.toLowerCase();
138
+ // Check for IPv4-mapped IPv6 address (::ffff:127.0.0.1)
139
+ // Note: URL constructor normalizes '::ffff:127.0.0.1' to '::ffff:7f00:1' (hex)
140
+ if (normalized.startsWith('::ffff:') || normalized.startsWith('0:0:0:0:0:ffff:')) {
141
+ const remainder = normalized.split('ffff:')[1];
142
+ if (remainder) {
143
+ if (remainder.includes('.')) {
144
+ return this.isDisallowedIPv4(remainder);
145
+ }
146
+ // Handle hex encoded IPv4 (e.g., 7f00:1)
147
+ const parts = remainder.split(':');
148
+ let high = 0;
149
+ let low = 0;
150
+ if (parts.length === 2) {
151
+ high = parseInt(parts[0] || '0', 16);
152
+ low = parseInt(parts[1] || '0', 16);
153
+ }
154
+ else if (parts.length === 1) {
155
+ low = parseInt(parts[0] || '0', 16);
156
+ }
157
+ // 127.0.0.0/8 (Loopback) -> 0x7f000000 - 0x7fffffff
158
+ if ((high >>> 8) === 127)
159
+ return true;
160
+ // 10.0.0.0/8 (Private) -> 0x0a000000 - 0x0affffff
161
+ if ((high >>> 8) === 10)
162
+ return true;
163
+ // 0.0.0.0/8 (Current network) -> 0x00000000 - 0x00ffffff
164
+ if ((high >>> 8) === 0)
165
+ return true;
166
+ // 169.254.0.0/16 (Link-local) -> 0xa9fe0000 - 0xa9feffff
167
+ if (high === 0xa9fe)
168
+ return true;
169
+ // 192.168.0.0/16 (Private) -> 0xc0a80000 - 0xc0a8ffff
170
+ if (high === 0xc0a8)
171
+ return true;
172
+ // 172.16.0.0/12 (Private) -> 0xac100000 - 0xac1fffff
173
+ // 172 = 0xac, 16 = 0x10, 31 = 0x1f
174
+ if ((high >>> 8) === 172 && (high & 0xff) >= 16 && (high & 0xff) <= 31)
175
+ return true;
176
+ }
177
+ }
178
+ if (normalized === '::1' || normalized === '0:0:0:0:0:0:0:1')
179
+ return true; // loopback
180
+ if (normalized === '::' || normalized === '0:0:0:0:0:0:0:0')
181
+ return true; // unspecified
182
+ if (normalized.startsWith('fe8') || normalized.startsWith('fe9') || normalized.startsWith('fea') || normalized.startsWith('feb')) {
183
+ return true; // link-local fe80::/10 (approx by prefix)
184
+ }
185
+ if (normalized.startsWith('fc') || normalized.startsWith('fd'))
186
+ return true; // unique local fc00::/7 (approx by prefix)
187
+ return false;
188
+ }
189
+ }
190
+ //# sourceMappingURL=ssrf-validator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ssrf-validator.js","sourceRoot":"","sources":["../../../src/security/ssrf-validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp4openapi",
3
- "version": "0.3.1",
3
+ "version": "0.3.4",
4
4
  "description": "Universal MCP server that generates tools from any OpenAPI specification",
5
5
  "type": "module",
6
6
  "main": "dist/src/index.js",
@@ -87,7 +87,7 @@
87
87
  "supertest": "^7.1.4",
88
88
  "ts-to-zod": "^5.0.1",
89
89
  "typescript": "^5.9.3",
90
- "typescript-json-schema": "^0.65.1",
90
+ "typescript-json-schema": "^0.67.1",
91
91
  "vite": "^6.0.5",
92
92
  "vitest": "^3.2.4"
93
93
  },