@ananay-nag/mcp-decorators 1.0.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 (214) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +561 -0
  3. package/banner.svg +111 -0
  4. package/dist/cjs/index.d.ts +3 -0
  5. package/dist/cjs/index.d.ts.map +1 -0
  6. package/dist/cjs/index.js +36 -0
  7. package/dist/cjs/index.js.map +1 -0
  8. package/dist/cjs/package.json +1 -0
  9. package/dist/cjs/src/client/decorators/client.decorator.d.ts +66 -0
  10. package/dist/cjs/src/client/decorators/client.decorator.d.ts.map +1 -0
  11. package/dist/cjs/src/client/decorators/client.decorator.js +206 -0
  12. package/dist/cjs/src/client/decorators/client.decorator.js.map +1 -0
  13. package/dist/cjs/src/client/decorators/index.d.ts +4 -0
  14. package/dist/cjs/src/client/decorators/index.d.ts.map +1 -0
  15. package/dist/cjs/src/client/decorators/index.js +23 -0
  16. package/dist/cjs/src/client/decorators/index.js.map +1 -0
  17. package/dist/cjs/src/client/decorators/notification.decorator.d.ts +8 -0
  18. package/dist/cjs/src/client/decorators/notification.decorator.d.ts.map +1 -0
  19. package/dist/cjs/src/client/decorators/notification.decorator.js +19 -0
  20. package/dist/cjs/src/client/decorators/notification.decorator.js.map +1 -0
  21. package/dist/cjs/src/client/decorators/requestHandler.decorator.d.ts +7 -0
  22. package/dist/cjs/src/client/decorators/requestHandler.decorator.d.ts.map +1 -0
  23. package/dist/cjs/src/client/decorators/requestHandler.decorator.js +18 -0
  24. package/dist/cjs/src/client/decorators/requestHandler.decorator.js.map +1 -0
  25. package/dist/cjs/src/client/index.d.ts +4 -0
  26. package/dist/cjs/src/client/index.d.ts.map +1 -0
  27. package/dist/cjs/src/client/index.js +20 -0
  28. package/dist/cjs/src/client/index.js.map +1 -0
  29. package/dist/cjs/src/client/types/client/client.d.ts +14 -0
  30. package/dist/cjs/src/client/types/client/client.d.ts.map +1 -0
  31. package/dist/cjs/src/client/types/client/client.js +3 -0
  32. package/dist/cjs/src/client/types/client/client.js.map +1 -0
  33. package/dist/cjs/src/client/types/index.d.ts +3 -0
  34. package/dist/cjs/src/client/types/index.d.ts.map +1 -0
  35. package/dist/cjs/src/client/types/index.js +19 -0
  36. package/dist/cjs/src/client/types/index.js.map +1 -0
  37. package/dist/cjs/src/client/utils/clientRegistry.d.ts +10 -0
  38. package/dist/cjs/src/client/utils/clientRegistry.d.ts.map +1 -0
  39. package/dist/cjs/src/client/utils/clientRegistry.js +38 -0
  40. package/dist/cjs/src/client/utils/clientRegistry.js.map +1 -0
  41. package/dist/cjs/src/client/utils/index.d.ts +2 -0
  42. package/dist/cjs/src/client/utils/index.d.ts.map +1 -0
  43. package/dist/cjs/src/client/utils/index.js +18 -0
  44. package/dist/cjs/src/client/utils/index.js.map +1 -0
  45. package/dist/cjs/src/server/decorators/action.decorator.d.ts +11 -0
  46. package/dist/cjs/src/server/decorators/action.decorator.d.ts.map +1 -0
  47. package/dist/cjs/src/server/decorators/action.decorator.js +23 -0
  48. package/dist/cjs/src/server/decorators/action.decorator.js.map +1 -0
  49. package/dist/cjs/src/server/decorators/completion.decorator.d.ts +12 -0
  50. package/dist/cjs/src/server/decorators/completion.decorator.d.ts.map +1 -0
  51. package/dist/cjs/src/server/decorators/completion.decorator.js +22 -0
  52. package/dist/cjs/src/server/decorators/completion.decorator.js.map +1 -0
  53. package/dist/cjs/src/server/decorators/index.d.ts +10 -0
  54. package/dist/cjs/src/server/decorators/index.d.ts.map +1 -0
  55. package/dist/cjs/src/server/decorators/index.js +25 -0
  56. package/dist/cjs/src/server/decorators/index.js.map +1 -0
  57. package/dist/cjs/src/server/decorators/notification.decorator.d.ts +11 -0
  58. package/dist/cjs/src/server/decorators/notification.decorator.d.ts.map +1 -0
  59. package/dist/cjs/src/server/decorators/notification.decorator.js +23 -0
  60. package/dist/cjs/src/server/decorators/notification.decorator.js.map +1 -0
  61. package/dist/cjs/src/server/decorators/prompt.decorator.d.ts +19 -0
  62. package/dist/cjs/src/server/decorators/prompt.decorator.d.ts.map +1 -0
  63. package/dist/cjs/src/server/decorators/prompt.decorator.js +23 -0
  64. package/dist/cjs/src/server/decorators/prompt.decorator.js.map +1 -0
  65. package/dist/cjs/src/server/decorators/requestHandler.decorator.d.ts +10 -0
  66. package/dist/cjs/src/server/decorators/requestHandler.decorator.d.ts.map +1 -0
  67. package/dist/cjs/src/server/decorators/requestHandler.decorator.js +33 -0
  68. package/dist/cjs/src/server/decorators/requestHandler.decorator.js.map +1 -0
  69. package/dist/cjs/src/server/decorators/resource.decorator.d.ts +27 -0
  70. package/dist/cjs/src/server/decorators/resource.decorator.d.ts.map +1 -0
  71. package/dist/cjs/src/server/decorators/resource.decorator.js +40 -0
  72. package/dist/cjs/src/server/decorators/resource.decorator.js.map +1 -0
  73. package/dist/cjs/src/server/decorators/server.decorator.d.ts +18 -0
  74. package/dist/cjs/src/server/decorators/server.decorator.d.ts.map +1 -0
  75. package/dist/cjs/src/server/decorators/server.decorator.js +385 -0
  76. package/dist/cjs/src/server/decorators/server.decorator.js.map +1 -0
  77. package/dist/cjs/src/server/decorators/subscribe.decorator.d.ts +13 -0
  78. package/dist/cjs/src/server/decorators/subscribe.decorator.d.ts.map +1 -0
  79. package/dist/cjs/src/server/decorators/subscribe.decorator.js +26 -0
  80. package/dist/cjs/src/server/decorators/subscribe.decorator.js.map +1 -0
  81. package/dist/cjs/src/server/decorators/tool.decorator.d.ts +15 -0
  82. package/dist/cjs/src/server/decorators/tool.decorator.d.ts.map +1 -0
  83. package/dist/cjs/src/server/decorators/tool.decorator.js +23 -0
  84. package/dist/cjs/src/server/decorators/tool.decorator.js.map +1 -0
  85. package/dist/cjs/src/server/index.d.ts +4 -0
  86. package/dist/cjs/src/server/index.d.ts.map +1 -0
  87. package/dist/cjs/src/server/index.js +33 -0
  88. package/dist/cjs/src/server/index.js.map +1 -0
  89. package/dist/cjs/src/server/types/index.d.ts +3 -0
  90. package/dist/cjs/src/server/types/index.d.ts.map +1 -0
  91. package/dist/cjs/src/server/types/index.js +19 -0
  92. package/dist/cjs/src/server/types/index.js.map +1 -0
  93. package/dist/cjs/src/server/types/server/index.d.ts +2 -0
  94. package/dist/cjs/src/server/types/server/index.d.ts.map +1 -0
  95. package/dist/cjs/src/server/types/server/index.js +18 -0
  96. package/dist/cjs/src/server/types/server/index.js.map +1 -0
  97. package/dist/cjs/src/server/types/server/server.d.ts +35 -0
  98. package/dist/cjs/src/server/types/server/server.d.ts.map +1 -0
  99. package/dist/cjs/src/server/types/server/server.js +3 -0
  100. package/dist/cjs/src/server/types/server/server.js.map +1 -0
  101. package/dist/cjs/src/server/utils/index.d.ts +2 -0
  102. package/dist/cjs/src/server/utils/index.d.ts.map +1 -0
  103. package/dist/cjs/src/server/utils/index.js +18 -0
  104. package/dist/cjs/src/server/utils/index.js.map +1 -0
  105. package/dist/cjs/src/server/utils/serverRegistry.d.ts +81 -0
  106. package/dist/cjs/src/server/utils/serverRegistry.d.ts.map +1 -0
  107. package/dist/cjs/src/server/utils/serverRegistry.js +151 -0
  108. package/dist/cjs/src/server/utils/serverRegistry.js.map +1 -0
  109. package/dist/esm/index.d.ts +3 -0
  110. package/dist/esm/index.d.ts.map +1 -0
  111. package/dist/esm/index.js +3 -0
  112. package/dist/esm/index.js.map +1 -0
  113. package/dist/esm/package.json +1 -0
  114. package/dist/esm/src/client/decorators/client.decorator.d.ts +66 -0
  115. package/dist/esm/src/client/decorators/client.decorator.d.ts.map +1 -0
  116. package/dist/esm/src/client/decorators/client.decorator.js +198 -0
  117. package/dist/esm/src/client/decorators/client.decorator.js.map +1 -0
  118. package/dist/esm/src/client/decorators/index.d.ts +4 -0
  119. package/dist/esm/src/client/decorators/index.d.ts.map +1 -0
  120. package/dist/esm/src/client/decorators/index.js +4 -0
  121. package/dist/esm/src/client/decorators/index.js.map +1 -0
  122. package/dist/esm/src/client/decorators/notification.decorator.d.ts +8 -0
  123. package/dist/esm/src/client/decorators/notification.decorator.d.ts.map +1 -0
  124. package/dist/esm/src/client/decorators/notification.decorator.js +15 -0
  125. package/dist/esm/src/client/decorators/notification.decorator.js.map +1 -0
  126. package/dist/esm/src/client/decorators/requestHandler.decorator.d.ts +7 -0
  127. package/dist/esm/src/client/decorators/requestHandler.decorator.d.ts.map +1 -0
  128. package/dist/esm/src/client/decorators/requestHandler.decorator.js +14 -0
  129. package/dist/esm/src/client/decorators/requestHandler.decorator.js.map +1 -0
  130. package/dist/esm/src/client/index.d.ts +4 -0
  131. package/dist/esm/src/client/index.d.ts.map +1 -0
  132. package/dist/esm/src/client/index.js +4 -0
  133. package/dist/esm/src/client/index.js.map +1 -0
  134. package/dist/esm/src/client/types/client/client.d.ts +14 -0
  135. package/dist/esm/src/client/types/client/client.d.ts.map +1 -0
  136. package/dist/esm/src/client/types/client/client.js +2 -0
  137. package/dist/esm/src/client/types/client/client.js.map +1 -0
  138. package/dist/esm/src/client/types/index.d.ts +3 -0
  139. package/dist/esm/src/client/types/index.d.ts.map +1 -0
  140. package/dist/esm/src/client/types/index.js +3 -0
  141. package/dist/esm/src/client/types/index.js.map +1 -0
  142. package/dist/esm/src/client/utils/clientRegistry.d.ts +10 -0
  143. package/dist/esm/src/client/utils/clientRegistry.d.ts.map +1 -0
  144. package/dist/esm/src/client/utils/clientRegistry.js +33 -0
  145. package/dist/esm/src/client/utils/clientRegistry.js.map +1 -0
  146. package/dist/esm/src/client/utils/index.d.ts +2 -0
  147. package/dist/esm/src/client/utils/index.d.ts.map +1 -0
  148. package/dist/esm/src/client/utils/index.js +2 -0
  149. package/dist/esm/src/client/utils/index.js.map +1 -0
  150. package/dist/esm/src/server/decorators/action.decorator.d.ts +11 -0
  151. package/dist/esm/src/server/decorators/action.decorator.d.ts.map +1 -0
  152. package/dist/esm/src/server/decorators/action.decorator.js +19 -0
  153. package/dist/esm/src/server/decorators/action.decorator.js.map +1 -0
  154. package/dist/esm/src/server/decorators/completion.decorator.d.ts +12 -0
  155. package/dist/esm/src/server/decorators/completion.decorator.d.ts.map +1 -0
  156. package/dist/esm/src/server/decorators/completion.decorator.js +18 -0
  157. package/dist/esm/src/server/decorators/completion.decorator.js.map +1 -0
  158. package/dist/esm/src/server/decorators/index.d.ts +10 -0
  159. package/dist/esm/src/server/decorators/index.d.ts.map +1 -0
  160. package/dist/esm/src/server/decorators/index.js +10 -0
  161. package/dist/esm/src/server/decorators/index.js.map +1 -0
  162. package/dist/esm/src/server/decorators/notification.decorator.d.ts +11 -0
  163. package/dist/esm/src/server/decorators/notification.decorator.d.ts.map +1 -0
  164. package/dist/esm/src/server/decorators/notification.decorator.js +19 -0
  165. package/dist/esm/src/server/decorators/notification.decorator.js.map +1 -0
  166. package/dist/esm/src/server/decorators/prompt.decorator.d.ts +19 -0
  167. package/dist/esm/src/server/decorators/prompt.decorator.d.ts.map +1 -0
  168. package/dist/esm/src/server/decorators/prompt.decorator.js +19 -0
  169. package/dist/esm/src/server/decorators/prompt.decorator.js.map +1 -0
  170. package/dist/esm/src/server/decorators/requestHandler.decorator.d.ts +10 -0
  171. package/dist/esm/src/server/decorators/requestHandler.decorator.d.ts.map +1 -0
  172. package/dist/esm/src/server/decorators/requestHandler.decorator.js +29 -0
  173. package/dist/esm/src/server/decorators/requestHandler.decorator.js.map +1 -0
  174. package/dist/esm/src/server/decorators/resource.decorator.d.ts +27 -0
  175. package/dist/esm/src/server/decorators/resource.decorator.d.ts.map +1 -0
  176. package/dist/esm/src/server/decorators/resource.decorator.js +35 -0
  177. package/dist/esm/src/server/decorators/resource.decorator.js.map +1 -0
  178. package/dist/esm/src/server/decorators/server.decorator.d.ts +18 -0
  179. package/dist/esm/src/server/decorators/server.decorator.d.ts.map +1 -0
  180. package/dist/esm/src/server/decorators/server.decorator.js +378 -0
  181. package/dist/esm/src/server/decorators/server.decorator.js.map +1 -0
  182. package/dist/esm/src/server/decorators/subscribe.decorator.d.ts +13 -0
  183. package/dist/esm/src/server/decorators/subscribe.decorator.d.ts.map +1 -0
  184. package/dist/esm/src/server/decorators/subscribe.decorator.js +21 -0
  185. package/dist/esm/src/server/decorators/subscribe.decorator.js.map +1 -0
  186. package/dist/esm/src/server/decorators/tool.decorator.d.ts +15 -0
  187. package/dist/esm/src/server/decorators/tool.decorator.d.ts.map +1 -0
  188. package/dist/esm/src/server/decorators/tool.decorator.js +19 -0
  189. package/dist/esm/src/server/decorators/tool.decorator.js.map +1 -0
  190. package/dist/esm/src/server/index.d.ts +4 -0
  191. package/dist/esm/src/server/index.d.ts.map +1 -0
  192. package/dist/esm/src/server/index.js +4 -0
  193. package/dist/esm/src/server/index.js.map +1 -0
  194. package/dist/esm/src/server/types/index.d.ts +3 -0
  195. package/dist/esm/src/server/types/index.d.ts.map +1 -0
  196. package/dist/esm/src/server/types/index.js +3 -0
  197. package/dist/esm/src/server/types/index.js.map +1 -0
  198. package/dist/esm/src/server/types/server/index.d.ts +2 -0
  199. package/dist/esm/src/server/types/server/index.d.ts.map +1 -0
  200. package/dist/esm/src/server/types/server/index.js +2 -0
  201. package/dist/esm/src/server/types/server/index.js.map +1 -0
  202. package/dist/esm/src/server/types/server/server.d.ts +35 -0
  203. package/dist/esm/src/server/types/server/server.d.ts.map +1 -0
  204. package/dist/esm/src/server/types/server/server.js +2 -0
  205. package/dist/esm/src/server/types/server/server.js.map +1 -0
  206. package/dist/esm/src/server/utils/index.d.ts +2 -0
  207. package/dist/esm/src/server/utils/index.d.ts.map +1 -0
  208. package/dist/esm/src/server/utils/index.js +2 -0
  209. package/dist/esm/src/server/utils/index.js.map +1 -0
  210. package/dist/esm/src/server/utils/serverRegistry.d.ts +81 -0
  211. package/dist/esm/src/server/utils/serverRegistry.d.ts.map +1 -0
  212. package/dist/esm/src/server/utils/serverRegistry.js +140 -0
  213. package/dist/esm/src/server/utils/serverRegistry.js.map +1 -0
  214. package/package.json +50 -0
@@ -0,0 +1,81 @@
1
+ import { RegisterServerOptions, UseServerOptions } from "../types/index.js";
2
+ /**
3
+ * Registers a server with the given options.
4
+ * Stores the server metadata in a registry.
5
+ * Throws an error if a server with the same name and version is already registered.
6
+ * @param options - Options for registering the server (name, version).
7
+ * @param server - The server instance to register.
8
+ */
9
+ export declare function registerServer(options: RegisterServerOptions, server: any): void;
10
+ /**
11
+ * Retrieves a registered server based on the provided options.
12
+ * Returns the server instance if found, otherwise undefined.
13
+ * If a version is specified, it returns the server with that specific version.
14
+ * If no version is specified and only one version is registered, it returns that server.
15
+ * Otherwise, it returns undefined.
16
+ * @param options - Options for retrieving the server (name, optional version).
17
+ * @returns The registered server instance or undefined.
18
+ */
19
+ export declare function getServer(options: UseServerOptions): any | undefined;
20
+ /**
21
+ * Metadata registration structure for server instances.
22
+ * Stores decorators data globally mapped to their respective server.
23
+ */
24
+ export interface ServerRegistration {
25
+ server: any;
26
+ tools: Map<string, {
27
+ options: any;
28
+ handler: Function;
29
+ }>;
30
+ prompts: Map<string, {
31
+ options: any;
32
+ handler: Function;
33
+ }>;
34
+ resources: Map<string, {
35
+ options: any;
36
+ handler: Function;
37
+ }>;
38
+ resourceTemplates: Map<string, {
39
+ options: any;
40
+ handler: Function;
41
+ }>;
42
+ subscribers: Map<string, Set<string>>;
43
+ subscribeHandler?: Function;
44
+ unsubscribeHandler?: Function;
45
+ completionHandlers: Array<{
46
+ ref: any;
47
+ handler: Function;
48
+ }>;
49
+ }
50
+ /**
51
+ * Get or create server registration details for tracking decorator features.
52
+ */
53
+ export declare function getOrCreateServerRegistration(server: any): ServerRegistration;
54
+ /**
55
+ * Match a URI against a URI template and extract parameters.
56
+ * E.g. template: "mysql://{tableName}/schema" matches uri: "mysql://users/schema"
57
+ * and returns { tableName: "users" }.
58
+ */
59
+ export declare function matchUriTemplate(template: string, uri: string): Record<string, string> | null;
60
+ /**
61
+ * Helper to notify clients that a resource has updated.
62
+ */
63
+ export declare function notifyResourceUpdated(server: any, uri: string): Promise<void>;
64
+ /**
65
+ * Helper to send progress notifications to a client from a server handler.
66
+ */
67
+ export declare function sendProgress(server: any, progressToken: string | number, progress: number, total?: number, message?: string): Promise<void>;
68
+ /**
69
+ * Helper to send logging messages/notifications from a server.
70
+ */
71
+ export declare function sendLoggingMessage(server: any, level: "debug" | "info" | "notice" | "warning" | "error" | "critical" | "alert" | "emergency", data: unknown, logger?: string): Promise<void>;
72
+ /**
73
+ * Helper to request elicitation (input/form) from the client.
74
+ */
75
+ export declare function elicitInput(server: any, params: {
76
+ mode: "form" | "url";
77
+ message?: string;
78
+ requestedSchema?: Record<string, unknown>;
79
+ url?: string;
80
+ }, options?: any): Promise<any>;
81
+ //# sourceMappingURL=serverRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverRegistry.d.ts","sourceRoot":"","sources":["../../../../../src/server/utils/serverRegistry.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,qBAAqB,EACrB,gBAAgB,EACjB,MAAM,mBAAmB,CAAC;AAK3B;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,EAC9B,MAAM,EAAE,GAAG,GACV,IAAI,CAgBN;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,GAAG,GAAG,SAAS,CAqBpE;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,GAAG,CAAC;IACZ,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IACxD,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IAC1D,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IAC5D,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IACpE,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,QAAQ,CAAC;IAC5B,kBAAkB,CAAC,EAAE,QAAQ,CAAC;IAC9B,kBAAkB,EAAE,KAAK,CAAC;QAAE,GAAG,EAAE,GAAG,CAAC;QAAC,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;CAC5D;AAID;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,GAAG,GAAG,kBAAkB,CAe7E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAoB7F;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMnF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,GAAG,EACX,aAAa,EAAE,MAAM,GAAG,MAAM,EAC9B,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,EAC7F,IAAI,EAAE,OAAO,EACb,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAUf;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,GAAG,EACX,MAAM,EAAE;IACN,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,EACD,OAAO,CAAC,EAAE,GAAG,GACZ,OAAO,CAAC,GAAG,CAAC,CAUd"}
@@ -0,0 +1,140 @@
1
+ import { z } from "zod";
2
+ const serverRegistry = new Map();
3
+ /**
4
+ * Registers a server with the given options.
5
+ * Stores the server metadata in a registry.
6
+ * Throws an error if a server with the same name and version is already registered.
7
+ * @param options - Options for registering the server (name, version).
8
+ * @param server - The server instance to register.
9
+ */
10
+ export function registerServer(options, server) {
11
+ const { name, version } = options;
12
+ const serverMetadata = { name, version, server };
13
+ const existingServers = serverRegistry.get(name) || [];
14
+ const alreadyRegistered = existingServers.some((s) => s.version === version);
15
+ if (alreadyRegistered) {
16
+ throw new Error(`Server with name "${name}" and version "${version}" is already registered.`);
17
+ }
18
+ serverRegistry.set(name, [...existingServers, serverMetadata]);
19
+ }
20
+ /**
21
+ * Retrieves a registered server based on the provided options.
22
+ * Returns the server instance if found, otherwise undefined.
23
+ * If a version is specified, it returns the server with that specific version.
24
+ * If no version is specified and only one version is registered, it returns that server.
25
+ * Otherwise, it returns undefined.
26
+ * @param options - Options for retrieving the server (name, optional version).
27
+ * @returns The registered server instance or undefined.
28
+ */
29
+ export function getServer(options) {
30
+ const { name, version } = options;
31
+ const serverMetadataList = serverRegistry.get(name);
32
+ if (!serverMetadataList || serverMetadataList.length === 0) {
33
+ return undefined;
34
+ }
35
+ if (version) {
36
+ const foundServer = serverMetadataList.find((s) => s.version === version);
37
+ return foundServer === null || foundServer === void 0 ? void 0 : foundServer.server;
38
+ }
39
+ if (serverMetadataList.length === 1) {
40
+ return serverMetadataList[0].server;
41
+ }
42
+ if (!version) {
43
+ console.log(`Server version not passed, will return same name version ${serverMetadataList[0].name} with index 0 found in registry.`);
44
+ }
45
+ return serverMetadataList[0].server; // No specific version requested and multiple versions exist
46
+ }
47
+ const activeServers = new Map();
48
+ /**
49
+ * Get or create server registration details for tracking decorator features.
50
+ */
51
+ export function getOrCreateServerRegistration(server) {
52
+ let reg = activeServers.get(server);
53
+ if (!reg) {
54
+ reg = {
55
+ server,
56
+ tools: new Map(),
57
+ prompts: new Map(),
58
+ resources: new Map(),
59
+ resourceTemplates: new Map(),
60
+ subscribers: new Map(),
61
+ completionHandlers: [],
62
+ };
63
+ activeServers.set(server, reg);
64
+ }
65
+ return reg;
66
+ }
67
+ /**
68
+ * Match a URI against a URI template and extract parameters.
69
+ * E.g. template: "mysql://{tableName}/schema" matches uri: "mysql://users/schema"
70
+ * and returns { tableName: "users" }.
71
+ */
72
+ export function matchUriTemplate(template, uri) {
73
+ const paramNames = [];
74
+ const regexStr = "^" + template
75
+ .replace(/[.+*?^$()|[\]\\\/\s]/g, "\\$&") // Escape regex special chars except {}
76
+ .replace(/\{([^}]+)\}/g, (_, name) => {
77
+ paramNames.push(name);
78
+ return "([^/]+)";
79
+ }) + "$";
80
+ const regex = new RegExp(regexStr);
81
+ const match = uri.match(regex);
82
+ if (!match) {
83
+ return null;
84
+ }
85
+ const params = {};
86
+ for (let i = 0; i < paramNames.length; i++) {
87
+ params[paramNames[i]] = match[i + 1];
88
+ }
89
+ return params;
90
+ }
91
+ /**
92
+ * Helper to notify clients that a resource has updated.
93
+ */
94
+ export async function notifyResourceUpdated(server, uri) {
95
+ const underlyingServer = server.server || server;
96
+ await underlyingServer.notification({
97
+ method: "notifications/resources/updated",
98
+ params: { uri }
99
+ });
100
+ }
101
+ /**
102
+ * Helper to send progress notifications to a client from a server handler.
103
+ */
104
+ export async function sendProgress(server, progressToken, progress, total, message) {
105
+ const underlyingServer = server.server || server;
106
+ await underlyingServer.notification({
107
+ method: "notifications/progress",
108
+ params: {
109
+ progressToken,
110
+ progress,
111
+ total,
112
+ message
113
+ }
114
+ });
115
+ }
116
+ /**
117
+ * Helper to send logging messages/notifications from a server.
118
+ */
119
+ export async function sendLoggingMessage(server, level, data, logger) {
120
+ const underlyingServer = server.server || server;
121
+ await underlyingServer.notification({
122
+ method: "notifications/message",
123
+ params: {
124
+ level,
125
+ data,
126
+ logger
127
+ }
128
+ });
129
+ }
130
+ /**
131
+ * Helper to request elicitation (input/form) from the client.
132
+ */
133
+ export async function elicitInput(server, params, options) {
134
+ const underlyingServer = server.server || server;
135
+ return underlyingServer.request({
136
+ method: "elicitation/create",
137
+ params
138
+ }, z.any(), options);
139
+ }
140
+ //# sourceMappingURL=serverRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serverRegistry.js","sourceRoot":"","sources":["../../../../../src/server/utils/serverRegistry.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@ananay-nag/mcp-decorators",
3
+ "version": "1.0.0",
4
+ "description": "Model Context Protocol implementation for TypeScript with decorators",
5
+ "type": "module",
6
+ "main": "./dist/cjs/index.js",
7
+ "module": "./dist/esm/index.js",
8
+ "types": "./dist/cjs/index.d.ts",
9
+ "engines": {
10
+ "node": ">=18"
11
+ },
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/esm/index.js",
15
+ "require": "./dist/cjs/index.js"
16
+ },
17
+ "./*": {
18
+ "import": "./dist/esm/*",
19
+ "require": "./dist/cjs/*"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "banner.svg"
25
+ ],
26
+ "scripts": {
27
+ "build:esm": "mkdir -p dist/esm && echo '{\"type\": \"module\"}' > dist/esm/package.json && tsc -p tsconfig.prod.json",
28
+ "build:esm:w": "npm run build:esm -- -w",
29
+ "build:cjs": "mkdir -p dist/cjs && echo '{\"type\": \"commonjs\"}' > dist/cjs/package.json && tsc -p tsconfig.cjs.json",
30
+ "build:cjs:w": "npm run build:cjs -- -w",
31
+ "build": "npm run build:esm && npm run build:cjs",
32
+ "build:publish": "rm -rf dist/ *mcp*.tgz && npm run build && npm pack"
33
+ },
34
+ "keywords": [],
35
+ "author": "",
36
+ "license": "ISC",
37
+ "dependencies": {
38
+ "@modelcontextprotocol/sdk": "^1.11.0",
39
+ "zod": "^3.23.8",
40
+ "zod-to-json-schema": "^3.24.1"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^24.0.4"
44
+ },
45
+ "homepage": "https://mcp-decorators-doc.vercel.app/",
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/ananay-nag/mcp-decorators.git"
49
+ }
50
+ }