mcp4openapi 0.1.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.
Files changed (209) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +489 -0
  3. package/dist/composite-executor.d.ts +65 -0
  4. package/dist/composite-executor.d.ts.map +1 -0
  5. package/dist/composite-executor.js +147 -0
  6. package/dist/composite-executor.js.map +1 -0
  7. package/dist/constants.d.ts +36 -0
  8. package/dist/constants.d.ts.map +1 -0
  9. package/dist/constants.js +36 -0
  10. package/dist/constants.js.map +1 -0
  11. package/dist/http-transport.d.ts +195 -0
  12. package/dist/http-transport.d.ts.map +1 -0
  13. package/dist/http-transport.js +760 -0
  14. package/dist/http-transport.js.map +1 -0
  15. package/dist/interceptors.d.ts +74 -0
  16. package/dist/interceptors.d.ts.map +1 -0
  17. package/dist/interceptors.js +220 -0
  18. package/dist/interceptors.js.map +1 -0
  19. package/dist/logger.d.ts +81 -0
  20. package/dist/logger.d.ts.map +1 -0
  21. package/dist/logger.js +264 -0
  22. package/dist/logger.js.map +1 -0
  23. package/dist/mcp-server.d.ts +110 -0
  24. package/dist/mcp-server.d.ts.map +1 -0
  25. package/dist/mcp-server.js +568 -0
  26. package/dist/mcp-server.js.map +1 -0
  27. package/dist/metrics.d.ts +86 -0
  28. package/dist/metrics.d.ts.map +1 -0
  29. package/dist/metrics.js +229 -0
  30. package/dist/metrics.js.map +1 -0
  31. package/dist/openapi-parser.d.ts +35 -0
  32. package/dist/openapi-parser.d.ts.map +1 -0
  33. package/dist/openapi-parser.js +160 -0
  34. package/dist/openapi-parser.js.map +1 -0
  35. package/dist/profile-loader.d.ts +25 -0
  36. package/dist/profile-loader.d.ts.map +1 -0
  37. package/dist/profile-loader.js +134 -0
  38. package/dist/profile-loader.js.map +1 -0
  39. package/dist/schema-validator.d.ts +32 -0
  40. package/dist/schema-validator.d.ts.map +1 -0
  41. package/dist/schema-validator.js +126 -0
  42. package/dist/schema-validator.js.map +1 -0
  43. package/dist/scripts/validate-profile.d.ts +9 -0
  44. package/dist/scripts/validate-profile.d.ts.map +1 -0
  45. package/dist/scripts/validate-profile.js +289 -0
  46. package/dist/scripts/validate-profile.js.map +1 -0
  47. package/dist/scripts/validate-schema.d.ts +9 -0
  48. package/dist/scripts/validate-schema.d.ts.map +1 -0
  49. package/dist/scripts/validate-schema.js +84 -0
  50. package/dist/scripts/validate-schema.js.map +1 -0
  51. package/dist/src/composite-executor.d.ts +75 -0
  52. package/dist/src/composite-executor.d.ts.map +1 -0
  53. package/dist/src/composite-executor.js +175 -0
  54. package/dist/src/composite-executor.js.map +1 -0
  55. package/dist/src/constants.d.ts +36 -0
  56. package/dist/src/constants.d.ts.map +1 -0
  57. package/dist/src/constants.js +36 -0
  58. package/dist/src/constants.js.map +1 -0
  59. package/dist/src/dag-executor.d.ts +49 -0
  60. package/dist/src/dag-executor.d.ts.map +1 -0
  61. package/dist/src/dag-executor.js +138 -0
  62. package/dist/src/dag-executor.js.map +1 -0
  63. package/dist/src/errors.d.ts +47 -0
  64. package/dist/src/errors.d.ts.map +1 -0
  65. package/dist/src/errors.js +99 -0
  66. package/dist/src/errors.js.map +1 -0
  67. package/dist/src/generated-schemas.d.ts +661 -0
  68. package/dist/src/generated-schemas.d.ts.map +1 -0
  69. package/dist/src/generated-schemas.js +66 -0
  70. package/dist/src/generated-schemas.js.map +1 -0
  71. package/dist/src/http-client-factory.d.ts +62 -0
  72. package/dist/src/http-client-factory.d.ts.map +1 -0
  73. package/dist/src/http-client-factory.js +121 -0
  74. package/dist/src/http-client-factory.js.map +1 -0
  75. package/dist/src/http-transport.d.ts +194 -0
  76. package/dist/src/http-transport.d.ts.map +1 -0
  77. package/dist/src/http-transport.js +851 -0
  78. package/dist/src/http-transport.js.map +1 -0
  79. package/dist/src/index.d.ts +8 -0
  80. package/dist/src/index.d.ts.map +1 -0
  81. package/dist/src/index.js +59 -0
  82. package/dist/src/index.js.map +1 -0
  83. package/dist/src/interceptors.d.ts +78 -0
  84. package/dist/src/interceptors.d.ts.map +1 -0
  85. package/dist/src/interceptors.js +252 -0
  86. package/dist/src/interceptors.js.map +1 -0
  87. package/dist/src/jsonrpc-validator.d.ts +27 -0
  88. package/dist/src/jsonrpc-validator.d.ts.map +1 -0
  89. package/dist/src/jsonrpc-validator.js +58 -0
  90. package/dist/src/jsonrpc-validator.js.map +1 -0
  91. package/dist/src/lib.d.ts +8 -0
  92. package/dist/src/lib.d.ts.map +1 -0
  93. package/dist/src/lib.js +7 -0
  94. package/dist/src/lib.js.map +1 -0
  95. package/dist/src/logger.d.ts +81 -0
  96. package/dist/src/logger.d.ts.map +1 -0
  97. package/dist/src/logger.js +264 -0
  98. package/dist/src/logger.js.map +1 -0
  99. package/dist/src/mcp-server.d.ts +117 -0
  100. package/dist/src/mcp-server.d.ts.map +1 -0
  101. package/dist/src/mcp-server.js +621 -0
  102. package/dist/src/mcp-server.js.map +1 -0
  103. package/dist/src/metrics.d.ts +86 -0
  104. package/dist/src/metrics.d.ts.map +1 -0
  105. package/dist/src/metrics.js +229 -0
  106. package/dist/src/metrics.js.map +1 -0
  107. package/dist/src/naming-warnings.d.ts +23 -0
  108. package/dist/src/naming-warnings.d.ts.map +1 -0
  109. package/dist/src/naming-warnings.js +83 -0
  110. package/dist/src/naming-warnings.js.map +1 -0
  111. package/dist/src/naming.d.ts +58 -0
  112. package/dist/src/naming.d.ts.map +1 -0
  113. package/dist/src/naming.js +510 -0
  114. package/dist/src/naming.js.map +1 -0
  115. package/dist/src/openapi-parser.d.ts +49 -0
  116. package/dist/src/openapi-parser.d.ts.map +1 -0
  117. package/dist/src/openapi-parser.js +216 -0
  118. package/dist/src/openapi-parser.js.map +1 -0
  119. package/dist/src/profile-loader.d.ts +77 -0
  120. package/dist/src/profile-loader.d.ts.map +1 -0
  121. package/dist/src/profile-loader.js +443 -0
  122. package/dist/src/profile-loader.js.map +1 -0
  123. package/dist/src/schema-validator.d.ts +30 -0
  124. package/dist/src/schema-validator.d.ts.map +1 -0
  125. package/dist/src/schema-validator.js +115 -0
  126. package/dist/src/schema-validator.js.map +1 -0
  127. package/dist/src/testing/fixtures.d.ts +268 -0
  128. package/dist/src/testing/fixtures.d.ts.map +1 -0
  129. package/dist/src/testing/fixtures.js +210 -0
  130. package/dist/src/testing/fixtures.js.map +1 -0
  131. package/dist/src/testing/mock-gitlab-server.d.ts +34 -0
  132. package/dist/src/testing/mock-gitlab-server.d.ts.map +1 -0
  133. package/dist/src/testing/mock-gitlab-server.js +351 -0
  134. package/dist/src/testing/mock-gitlab-server.js.map +1 -0
  135. package/dist/src/testing/mock-utils.d.ts +41 -0
  136. package/dist/src/testing/mock-utils.d.ts.map +1 -0
  137. package/dist/src/testing/mock-utils.js +59 -0
  138. package/dist/src/testing/mock-utils.js.map +1 -0
  139. package/dist/src/testing/test-http-utils.d.ts +52 -0
  140. package/dist/src/testing/test-http-utils.d.ts.map +1 -0
  141. package/dist/src/testing/test-http-utils.js +109 -0
  142. package/dist/src/testing/test-http-utils.js.map +1 -0
  143. package/dist/src/testing/test-types.d.ts +76 -0
  144. package/dist/src/testing/test-types.d.ts.map +1 -0
  145. package/dist/src/testing/test-types.js +7 -0
  146. package/dist/src/testing/test-types.js.map +1 -0
  147. package/dist/src/tool-generator.d.ts +43 -0
  148. package/dist/src/tool-generator.d.ts.map +1 -0
  149. package/dist/src/tool-generator.js +123 -0
  150. package/dist/src/tool-generator.js.map +1 -0
  151. package/dist/src/types/http-transport.d.ts +45 -0
  152. package/dist/src/types/http-transport.d.ts.map +1 -0
  153. package/dist/src/types/http-transport.js +8 -0
  154. package/dist/src/types/http-transport.js.map +1 -0
  155. package/dist/src/types/openapi.d.ts +50 -0
  156. package/dist/src/types/openapi.d.ts.map +1 -0
  157. package/dist/src/types/openapi.js +9 -0
  158. package/dist/src/types/openapi.js.map +1 -0
  159. package/dist/src/types/profile.d.ts +80 -0
  160. package/dist/src/types/profile.d.ts.map +1 -0
  161. package/dist/src/types/profile.js +9 -0
  162. package/dist/src/types/profile.js.map +1 -0
  163. package/dist/src/validation-utils.d.ts +15 -0
  164. package/dist/src/validation-utils.d.ts.map +1 -0
  165. package/dist/src/validation-utils.js +25 -0
  166. package/dist/src/validation-utils.js.map +1 -0
  167. package/dist/testing/fixtures.d.ts +186 -0
  168. package/dist/testing/fixtures.d.ts.map +1 -0
  169. package/dist/testing/fixtures.js +135 -0
  170. package/dist/testing/fixtures.js.map +1 -0
  171. package/dist/testing/http-integration.test.d.ts +7 -0
  172. package/dist/testing/http-integration.test.d.ts.map +1 -0
  173. package/dist/testing/http-integration.test.js +383 -0
  174. package/dist/testing/http-integration.test.js.map +1 -0
  175. package/dist/testing/http-multiuser.test.d.ts +10 -0
  176. package/dist/testing/http-multiuser.test.d.ts.map +1 -0
  177. package/dist/testing/http-multiuser.test.js +255 -0
  178. package/dist/testing/http-multiuser.test.js.map +1 -0
  179. package/dist/testing/integration.test.d.ts +8 -0
  180. package/dist/testing/integration.test.d.ts.map +1 -0
  181. package/dist/testing/integration.test.js +247 -0
  182. package/dist/testing/integration.test.js.map +1 -0
  183. package/dist/testing/mock-gitlab-server.d.ts +34 -0
  184. package/dist/testing/mock-gitlab-server.d.ts.map +1 -0
  185. package/dist/testing/mock-gitlab-server.js +224 -0
  186. package/dist/testing/mock-gitlab-server.js.map +1 -0
  187. package/dist/testing/test-types.d.ts +59 -0
  188. package/dist/testing/test-types.d.ts.map +1 -0
  189. package/dist/testing/test-types.js +7 -0
  190. package/dist/testing/test-types.js.map +1 -0
  191. package/dist/tool-generator.d.ts +43 -0
  192. package/dist/tool-generator.d.ts.map +1 -0
  193. package/dist/tool-generator.js +123 -0
  194. package/dist/tool-generator.js.map +1 -0
  195. package/dist/tsconfig.tsbuildinfo +1 -0
  196. package/dist/types/http-transport.d.ts +39 -0
  197. package/dist/types/http-transport.d.ts.map +1 -0
  198. package/dist/types/http-transport.js +8 -0
  199. package/dist/types/http-transport.js.map +1 -0
  200. package/dist/types/openapi.d.ts +50 -0
  201. package/dist/types/openapi.d.ts.map +1 -0
  202. package/dist/types/openapi.js +9 -0
  203. package/dist/types/openapi.js.map +1 -0
  204. package/dist/types/profile.d.ts +76 -0
  205. package/dist/types/profile.d.ts.map +1 -0
  206. package/dist/types/profile.js +9 -0
  207. package/dist/types/profile.js.map +1 -0
  208. package/package.json +84 -0
  209. package/profile-schema.json +369 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Type definitions for test data
3
+ *
4
+ * Why: Avoid 'as any' casts in tests, improve type safety
5
+ */
6
+ export interface Badge {
7
+ id: number;
8
+ name: string;
9
+ link_url: string;
10
+ image_url: string;
11
+ rendered_link_url?: string;
12
+ rendered_image_url?: string;
13
+ }
14
+ export interface Branch {
15
+ name: string;
16
+ default: boolean;
17
+ protected: boolean;
18
+ can_push?: boolean;
19
+ developers_can_push?: boolean;
20
+ developers_can_merge?: boolean;
21
+ }
22
+ export interface AccessRequest {
23
+ id: number;
24
+ username: string;
25
+ name: string;
26
+ state: string;
27
+ created_at: string;
28
+ requested_at: string;
29
+ access_level?: number;
30
+ }
31
+ export interface Job {
32
+ id: number;
33
+ status: string;
34
+ stage: string;
35
+ name: string;
36
+ ref: string;
37
+ created_at: string;
38
+ started_at?: string;
39
+ finished_at?: string;
40
+ duration?: number;
41
+ user?: {
42
+ id: number;
43
+ name: string;
44
+ username: string;
45
+ };
46
+ }
47
+ export interface MergeRequest {
48
+ id: number;
49
+ iid: number;
50
+ title: string;
51
+ description?: string;
52
+ state: string;
53
+ web_url: string;
54
+ author: {
55
+ id: number;
56
+ name: string;
57
+ username: string;
58
+ };
59
+ source_branch: string;
60
+ target_branch: string;
61
+ created_at: string;
62
+ updated_at: string;
63
+ }
64
+ export interface CompositeResult {
65
+ data: Record<string, unknown>;
66
+ completed_steps: number;
67
+ total_steps: number;
68
+ errors?: Array<{
69
+ step: string;
70
+ error: string;
71
+ }>;
72
+ }
73
+ export type McpToolResult = Badge[] | Badge | Branch[] | Branch | AccessRequest[] | AccessRequest | Job[] | Job | MergeRequest[] | MergeRequest | CompositeResult | {
74
+ status: string;
75
+ };
76
+ //# sourceMappingURL=test-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-types.d.ts","sourceRoot":"","sources":["../../../src/testing/test-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,MAAM,aAAa,GACrB,KAAK,EAAE,GACP,KAAK,GACL,MAAM,EAAE,GACR,MAAM,GACN,aAAa,EAAE,GACf,aAAa,GACb,GAAG,EAAE,GACL,GAAG,GACH,YAAY,EAAE,GACd,YAAY,GACZ,eAAe,GACf;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Type definitions for test data
3
+ *
4
+ * Why: Avoid 'as any' casts in tests, improve type safety
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=test-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test-types.js","sourceRoot":"","sources":["../../../src/testing/test-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * MCP tool generator from profile definitions
3
+ *
4
+ * Why: Translates profile config into MCP SDK tool definitions. Handles both
5
+ * simple (single operation) and composite (multi-step) tools.
6
+ */
7
+ import type { Tool } from '@modelcontextprotocol/sdk/types.js';
8
+ import type { ToolDefinition } from './types/profile.js';
9
+ import type { OpenAPIParser } from './openapi-parser.js';
10
+ export declare class ToolGenerator {
11
+ private parser;
12
+ constructor(parser: OpenAPIParser);
13
+ /**
14
+ * Generate MCP tool from profile definition
15
+ */
16
+ generateTool(toolDef: ToolDefinition): Tool;
17
+ /**
18
+ * Generate JSON Schema for tool parameters
19
+ *
20
+ * Why JSON Schema: MCP SDK expects JSON Schema for parameter validation.
21
+ * LLM uses schema to understand what parameters are needed.
22
+ */
23
+ private generateInputSchema;
24
+ /**
25
+ * Convert parameter definition to JSON Schema
26
+ */
27
+ private parameterToJsonSchema;
28
+ /**
29
+ * Validate tool arguments against parameter definitions
30
+ *
31
+ * Why manual validation: Checks conditional requirements (required_for)
32
+ * which JSON Schema can't express directly.
33
+ */
34
+ validateArguments(toolDef: ToolDefinition, args: Record<string, unknown>): void;
35
+ /**
36
+ * Map tool action to OpenAPI operation ID
37
+ *
38
+ * Why: Single tool with 'action' parameter maps to multiple operations.
39
+ * Example: manage_badges + action=create => postApiV4ProjectsIdBadges
40
+ */
41
+ mapActionToOperation(toolDef: ToolDefinition, args: Record<string, unknown>): string | undefined;
42
+ }
43
+ //# sourceMappingURL=tool-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-generator.d.ts","sourceRoot":"","sources":["../../src/tool-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAuB,MAAM,oBAAoB,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qBAAa,aAAa;IACZ,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IAEzC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAU3C;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA2B3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAqB7B;;;;;OAKG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IA4B/E;;;;;OAKG;IACH,oBAAoB,CAAC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS;CAwBjG"}
@@ -0,0 +1,123 @@
1
+ /**
2
+ * MCP tool generator from profile definitions
3
+ *
4
+ * Why: Translates profile config into MCP SDK tool definitions. Handles both
5
+ * simple (single operation) and composite (multi-step) tools.
6
+ */
7
+ export class ToolGenerator {
8
+ parser;
9
+ constructor(parser) {
10
+ this.parser = parser;
11
+ }
12
+ /**
13
+ * Generate MCP tool from profile definition
14
+ */
15
+ generateTool(toolDef) {
16
+ const inputSchema = this.generateInputSchema(toolDef);
17
+ return {
18
+ name: toolDef.name,
19
+ description: toolDef.description,
20
+ inputSchema,
21
+ };
22
+ }
23
+ /**
24
+ * Generate JSON Schema for tool parameters
25
+ *
26
+ * Why JSON Schema: MCP SDK expects JSON Schema for parameter validation.
27
+ * LLM uses schema to understand what parameters are needed.
28
+ */
29
+ generateInputSchema(toolDef) {
30
+ const properties = {};
31
+ const required = [];
32
+ for (const [name, param] of Object.entries(toolDef.parameters)) {
33
+ properties[name] = this.parameterToJsonSchema(param);
34
+ // Add to required if unconditionally required
35
+ if (param.required) {
36
+ required.push(name);
37
+ }
38
+ // Add conditional requirement hints in description
39
+ if (param.required_for && param.required_for.length > 0) {
40
+ const existing = properties[name].description || '';
41
+ properties[name].description = existing +
42
+ ` Required when action is: ${param.required_for.join(', ')}.`;
43
+ }
44
+ }
45
+ return {
46
+ type: 'object',
47
+ properties,
48
+ required: required.length > 0 ? required : undefined,
49
+ };
50
+ }
51
+ /**
52
+ * Convert parameter definition to JSON Schema
53
+ */
54
+ parameterToJsonSchema(param) {
55
+ const schema = {
56
+ type: param.type,
57
+ description: param.description,
58
+ };
59
+ if (param.enum) {
60
+ schema.enum = param.enum;
61
+ }
62
+ if (param.default !== undefined) {
63
+ schema.default = param.default;
64
+ }
65
+ if (param.type === 'array' && param.items) {
66
+ schema.items = { type: param.items.type };
67
+ }
68
+ return schema;
69
+ }
70
+ /**
71
+ * Validate tool arguments against parameter definitions
72
+ *
73
+ * Why manual validation: Checks conditional requirements (required_for)
74
+ * which JSON Schema can't express directly.
75
+ */
76
+ validateArguments(toolDef, args) {
77
+ for (const [name, param] of Object.entries(toolDef.parameters)) {
78
+ const value = args[name];
79
+ // Check unconditional required
80
+ if (param.required && value === undefined) {
81
+ throw new Error(`Missing required parameter: ${name}`);
82
+ }
83
+ // Check conditional required
84
+ if (param.required_for && param.required_for.length > 0) {
85
+ const action = args['action'];
86
+ if (action && param.required_for.includes(action) && value === undefined) {
87
+ throw new Error(`Parameter '${name}' is required for action '${action}'`);
88
+ }
89
+ }
90
+ // Validate enum
91
+ if (value !== undefined && param.enum && !param.enum.includes(String(value))) {
92
+ throw new Error(`Invalid value for ${name}. Must be one of: ${param.enum.join(', ')}`);
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * Map tool action to OpenAPI operation ID
98
+ *
99
+ * Why: Single tool with 'action' parameter maps to multiple operations.
100
+ * Example: manage_badges + action=create => postApiV4ProjectsIdBadges
101
+ */
102
+ mapActionToOperation(toolDef, args) {
103
+ if (!toolDef.operations)
104
+ return undefined;
105
+ const action = args['action'];
106
+ if (!action) {
107
+ // If single operation, use it directly
108
+ const operations = Object.values(toolDef.operations);
109
+ return operations.length === 1 ? operations[0] : undefined;
110
+ }
111
+ // For resource_type discrimination (e.g., project vs group)
112
+ const resourceType = args['resource_type'];
113
+ if (resourceType) {
114
+ // Try resource-specific operation first
115
+ const key = `${action}_${resourceType}`;
116
+ if (toolDef.operations[key]) {
117
+ return toolDef.operations[key];
118
+ }
119
+ }
120
+ return toolDef.operations[action];
121
+ }
122
+ }
123
+ //# sourceMappingURL=tool-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-generator.js","sourceRoot":"","sources":["../../src/tool-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,OAAO,aAAa;IACJ;IAApB,YAAoB,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAE7C;;OAEG;IACH,YAAY,CAAC,OAAuB;QAClC,MAAM,WAAW,GAAG,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,WAAW;SACZ,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACK,mBAAmB,CAAC,OAAuB;QACjD,MAAM,UAAU,GAA4C,EAAE,CAAC;QAC/D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;YAErD,8CAA8C;YAC9C,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YAED,mDAAmD;YACnD,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,IAAI,EAAE,CAAC;gBACpD,UAAU,CAAC,IAAI,CAAC,CAAC,WAAW,GAAG,QAAQ;oBACrC,6BAA6B,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YAClE,CAAC;QACH,CAAC;QAED,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,QAAQ,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;SACrD,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,qBAAqB,CAAC,KAA0B;QACtD,MAAM,MAAM,GAA4B;YACtC,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,WAAW;SAC/B,CAAC;QAEF,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;QAC3B,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QACjC,CAAC;QAED,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAC1C,MAAM,CAAC,KAAK,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAC5C,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,iBAAiB,CAAC,OAAuB,EAAE,IAA6B;QACtE,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YAEzB,+BAA+B;YAC/B,IAAI,KAAK,CAAC,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBAC1C,MAAM,IAAI,KAAK,CAAC,+BAA+B,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;YAED,6BAA6B;YAC7B,IAAI,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxD,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAuB,CAAC;gBACpD,IAAI,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;oBACzE,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,6BAA6B,MAAM,GAAG,CACzD,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,gBAAgB;YAChB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC7E,MAAM,IAAI,KAAK,CACb,qBAAqB,IAAI,qBAAqB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtE,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,oBAAoB,CAAC,OAAuB,EAAE,IAA6B;QACzE,IAAI,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO,SAAS,CAAC;QAE1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAuB,CAAC;QAEpD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,uCAAuC;YACvC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YACrD,OAAO,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC7D,CAAC;QAED,4DAA4D;QAC5D,MAAM,YAAY,GAAG,IAAI,CAAC,eAAe,CAAuB,CAAC;QAEjE,IAAI,YAAY,EAAE,CAAC;YACjB,wCAAwC;YACxC,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,YAAY,EAAE,CAAC;YACxC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5B,OAAO,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Type definitions for HTTP transport
3
+ *
4
+ * Based on MCP Specification 2025-03-26
5
+ * https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
6
+ */
7
+ import type { Request as ExpressRequest, Response } from 'express';
8
+ export interface SessionData {
9
+ id: string;
10
+ createdAt: number;
11
+ lastActivityAt: number;
12
+ sseStreams: Map<string, SSEStreamState>;
13
+ authToken?: string;
14
+ }
15
+ export interface SSEStreamState {
16
+ streamId: string;
17
+ lastEventId: number;
18
+ messageQueue: QueuedMessage[];
19
+ active: boolean;
20
+ response: Response;
21
+ }
22
+ export interface QueuedMessage {
23
+ eventId: number;
24
+ data: unknown;
25
+ timestamp: number;
26
+ }
27
+ export interface HttpTransportConfig {
28
+ host: string;
29
+ port: number;
30
+ sessionTimeoutMs: number;
31
+ heartbeatEnabled: boolean;
32
+ heartbeatIntervalMs: number;
33
+ metricsEnabled: boolean;
34
+ metricsPath: string;
35
+ allowedOrigins?: string[];
36
+ rateLimitEnabled?: boolean;
37
+ rateLimitWindowMs?: number;
38
+ rateLimitMaxRequests?: number;
39
+ rateLimitMetricsMax?: number;
40
+ maxTokenLength?: number;
41
+ }
42
+ export interface McpRequest extends ExpressRequest {
43
+ sessionId?: string;
44
+ }
45
+ //# sourceMappingURL=http-transport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-transport.d.ts","sourceRoot":"","sources":["../../../src/types/http-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,OAAO,IAAI,cAAc,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,aAAa,EAAE,CAAC;IAC9B,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAW,SAAQ,cAAc;IAChD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Type definitions for HTTP transport
3
+ *
4
+ * Based on MCP Specification 2025-03-26
5
+ * https://modelcontextprotocol.io/specification/2025-03-26/basic/transports
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=http-transport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../../src/types/http-transport.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * OpenAPI operational types
3
+ *
4
+ * Why simplified: We only need subset of OpenAPI spec for our use case
5
+ * (operation lookup, parameter extraction, request building). Full OpenAPI
6
+ * types from openapi-types are too verbose for runtime usage.
7
+ */
8
+ import type { OpenAPIV3 } from 'openapi-types';
9
+ export interface OpenAPIIndex {
10
+ spec: OpenAPIV3.Document;
11
+ operations: Map<string, OperationInfo>;
12
+ paths: Map<string, PathInfo>;
13
+ }
14
+ export interface OperationInfo {
15
+ operationId: string;
16
+ method: string;
17
+ path: string;
18
+ summary?: string;
19
+ description?: string;
20
+ parameters: ParameterInfo[];
21
+ requestBody?: RequestBodyInfo;
22
+ tags?: string[];
23
+ }
24
+ export interface PathInfo {
25
+ path: string;
26
+ operations: Record<string, OperationInfo>;
27
+ }
28
+ export interface ParameterInfo {
29
+ name: string;
30
+ in: 'path' | 'query' | 'header' | 'cookie';
31
+ required: boolean;
32
+ schema: SchemaInfo;
33
+ description?: string;
34
+ }
35
+ export interface RequestBodyInfo {
36
+ required: boolean;
37
+ content: Record<string, {
38
+ schema: SchemaInfo;
39
+ }>;
40
+ }
41
+ export interface SchemaInfo {
42
+ type?: string;
43
+ format?: string;
44
+ enum?: unknown[];
45
+ items?: SchemaInfo;
46
+ properties?: Record<string, SchemaInfo>;
47
+ required?: string[];
48
+ default?: unknown;
49
+ }
50
+ //# sourceMappingURL=openapi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.d.ts","sourceRoot":"","sources":["../../../src/types/openapi.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC;IACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;CAC3C;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,UAAU,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * OpenAPI operational types
3
+ *
4
+ * Why simplified: We only need subset of OpenAPI spec for our use case
5
+ * (operation lookup, parameter extraction, request building). Full OpenAPI
6
+ * types from openapi-types are too verbose for runtime usage.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=openapi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openapi.js","sourceRoot":"","sources":["../../../src/types/openapi.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * Profile configuration types
3
+ *
4
+ * Why these types: Profiles define which MCP tools are exposed and how they map
5
+ * to OpenAPI operations. This enables same server to serve different use cases
6
+ * (admin vs developer vs readonly) without code changes.
7
+ */
8
+ export interface Profile {
9
+ profile_name: string;
10
+ description?: string;
11
+ tools: ToolDefinition[];
12
+ interceptors?: InterceptorConfig;
13
+ parameter_aliases?: Record<string, string[]>;
14
+ }
15
+ export interface ToolDefinition {
16
+ name: string;
17
+ description: string;
18
+ operations?: Record<string, string> | {
19
+ [key: string]: string;
20
+ };
21
+ composite?: boolean;
22
+ steps?: CompositeStep[];
23
+ partial_results?: boolean;
24
+ parameters: Record<string, ParameterDefinition>;
25
+ metadata_params?: string[];
26
+ response_fields?: Record<string, string[]>;
27
+ }
28
+ export interface ParameterDefinition {
29
+ type: 'string' | 'integer' | 'number' | 'boolean' | 'array' | 'object';
30
+ description: string;
31
+ required?: boolean;
32
+ required_for?: string[];
33
+ enum?: string[];
34
+ items?: {
35
+ type: string;
36
+ };
37
+ default?: unknown;
38
+ example?: unknown;
39
+ }
40
+ export interface CompositeStep {
41
+ call: string;
42
+ store_as: string;
43
+ depends_on?: string[];
44
+ }
45
+ export interface InterceptorConfig {
46
+ auth?: AuthInterceptor;
47
+ base_url?: BaseUrlConfig;
48
+ rate_limit?: RateLimitConfig;
49
+ retry?: RetryConfig;
50
+ array_format?: 'brackets' | 'indices' | 'repeat' | 'comma';
51
+ }
52
+ /**
53
+ * Auth interceptor configuration
54
+ *
55
+ * - bearer: Standard HTTP Bearer token (Authorization: Bearer <token>)
56
+ * - query: API key in query string (?api_key=<token>)
57
+ * - custom-header: Custom header name (e.g., X-API-Key: <token>)
58
+ */
59
+ export interface AuthInterceptor {
60
+ type: 'bearer' | 'query' | 'custom-header';
61
+ header_name?: string;
62
+ query_param?: string;
63
+ value_from_env: string;
64
+ }
65
+ export interface BaseUrlConfig {
66
+ value_from_env: string;
67
+ default?: string;
68
+ }
69
+ export interface RateLimitConfig {
70
+ max_requests_per_minute: number;
71
+ overrides?: Record<string, {
72
+ max_requests_per_minute: number;
73
+ }>;
74
+ }
75
+ export interface RetryConfig {
76
+ max_attempts: number;
77
+ backoff_ms: number[];
78
+ retry_on_status: number[];
79
+ }
80
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/types/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,OAAO;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IAGpB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;IAGhE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAGhD,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAG3B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;IACvE,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,YAAY,CAAC,EAAE,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;CAC5D;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,eAAe,CAAC;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,uBAAuB,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,WAAW;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Profile configuration types
3
+ *
4
+ * Why these types: Profiles define which MCP tools are exposed and how they map
5
+ * to OpenAPI operations. This enables same server to serve different use cases
6
+ * (admin vs developer vs readonly) without code changes.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=profile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.js","sourceRoot":"","sources":["../../../src/types/profile.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Validation utilities for common data types
3
+ *
4
+ * Why: Provides reusable validation functions for email, URI, and other formats
5
+ * Centralizes validation logic and ensures consistency across the application
6
+ */
7
+ /**
8
+ * Validates if a string is a valid email address
9
+ */
10
+ export declare function isEmail(value: string): boolean;
11
+ /**
12
+ * Validates if a string is a valid URI
13
+ */
14
+ export declare function isUri(value: string): boolean;
15
+ //# sourceMappingURL=validation-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-utils.d.ts","sourceRoot":"","sources":["../../src/validation-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAE9C;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAO5C"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Validation utilities for common data types
3
+ *
4
+ * Why: Provides reusable validation functions for email, URI, and other formats
5
+ * Centralizes validation logic and ensures consistency across the application
6
+ */
7
+ /**
8
+ * Validates if a string is a valid email address
9
+ */
10
+ export function isEmail(value) {
11
+ return /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value);
12
+ }
13
+ /**
14
+ * Validates if a string is a valid URI
15
+ */
16
+ export function isUri(value) {
17
+ try {
18
+ new URL(value);
19
+ return true;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ //# sourceMappingURL=validation-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation-utils.js","sourceRoot":"","sources":["../../src/validation-utils.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,OAAO,4BAA4B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,IAAI,CAAC;QACH,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QACf,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}