@itm-platform/mcp-server 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 (259) hide show
  1. package/README.md +193 -0
  2. package/bin/mcp-server.js +2 -0
  3. package/dist/audit-config.d.ts +2 -0
  4. package/dist/audit-config.d.ts.map +1 -0
  5. package/dist/audit-config.js +4 -0
  6. package/dist/audit-config.js.map +1 -0
  7. package/dist/auth/api-key-auth.d.ts +3 -0
  8. package/dist/auth/api-key-auth.d.ts.map +1 -0
  9. package/dist/auth/api-key-auth.js +53 -0
  10. package/dist/auth/api-key-auth.js.map +1 -0
  11. package/dist/auth/effective-user-context.d.ts +16 -0
  12. package/dist/auth/effective-user-context.d.ts.map +1 -0
  13. package/dist/auth/effective-user-context.js +9 -0
  14. package/dist/auth/effective-user-context.js.map +1 -0
  15. package/dist/auth/license-resolver.d.ts +6 -0
  16. package/dist/auth/license-resolver.d.ts.map +1 -0
  17. package/dist/auth/license-resolver.js +12 -0
  18. package/dist/auth/license-resolver.js.map +1 -0
  19. package/dist/auth/oauth-auth.d.ts +22 -0
  20. package/dist/auth/oauth-auth.d.ts.map +1 -0
  21. package/dist/auth/oauth-auth.js +34 -0
  22. package/dist/auth/oauth-auth.js.map +1 -0
  23. package/dist/auth/oauth-metadata.d.ts +11 -0
  24. package/dist/auth/oauth-metadata.d.ts.map +1 -0
  25. package/dist/auth/oauth-metadata.js +14 -0
  26. package/dist/auth/oauth-metadata.js.map +1 -0
  27. package/dist/auth/token-extraction.d.ts +2 -0
  28. package/dist/auth/token-extraction.d.ts.map +1 -0
  29. package/dist/auth/token-extraction.js +7 -0
  30. package/dist/auth/token-extraction.js.map +1 -0
  31. package/dist/clients/audit-client.d.ts +25 -0
  32. package/dist/clients/audit-client.d.ts.map +1 -0
  33. package/dist/clients/audit-client.js +37 -0
  34. package/dist/clients/audit-client.js.map +1 -0
  35. package/dist/clients/datamart-client.d.ts +16 -0
  36. package/dist/clients/datamart-client.d.ts.map +1 -0
  37. package/dist/clients/datamart-client.js +32 -0
  38. package/dist/clients/datamart-client.js.map +1 -0
  39. package/dist/clients/index.d.ts +18 -0
  40. package/dist/clients/index.d.ts.map +1 -0
  41. package/dist/clients/index.js +11 -0
  42. package/dist/clients/index.js.map +1 -0
  43. package/dist/clients/rest-client.d.ts +14 -0
  44. package/dist/clients/rest-client.d.ts.map +1 -0
  45. package/dist/clients/rest-client.js +29 -0
  46. package/dist/clients/rest-client.js.map +1 -0
  47. package/dist/gateway.d.ts +2 -0
  48. package/dist/gateway.d.ts.map +1 -0
  49. package/dist/gateway.js +6 -0
  50. package/dist/gateway.js.map +1 -0
  51. package/dist/instrument-server.d.ts +11 -0
  52. package/dist/instrument-server.d.ts.map +1 -0
  53. package/dist/instrument-server.js +51 -0
  54. package/dist/instrument-server.js.map +1 -0
  55. package/dist/logger.d.ts +4 -0
  56. package/dist/logger.d.ts.map +1 -0
  57. package/dist/logger.js +39 -0
  58. package/dist/logger.js.map +1 -0
  59. package/dist/prompts/portfolio-overview.d.ts +3 -0
  60. package/dist/prompts/portfolio-overview.d.ts.map +1 -0
  61. package/dist/prompts/portfolio-overview.js +21 -0
  62. package/dist/prompts/portfolio-overview.js.map +1 -0
  63. package/dist/prompts/project-status.d.ts +3 -0
  64. package/dist/prompts/project-status.d.ts.map +1 -0
  65. package/dist/prompts/project-status.js +24 -0
  66. package/dist/prompts/project-status.js.map +1 -0
  67. package/dist/prompts/risk-analysis.d.ts +3 -0
  68. package/dist/prompts/risk-analysis.d.ts.map +1 -0
  69. package/dist/prompts/risk-analysis.js +23 -0
  70. package/dist/prompts/risk-analysis.js.map +1 -0
  71. package/dist/prompts/team-workload.d.ts +3 -0
  72. package/dist/prompts/team-workload.d.ts.map +1 -0
  73. package/dist/prompts/team-workload.js +29 -0
  74. package/dist/prompts/team-workload.js.map +1 -0
  75. package/dist/resources/calendars.d.ts +4 -0
  76. package/dist/resources/calendars.d.ts.map +1 -0
  77. package/dist/resources/calendars.js +18 -0
  78. package/dist/resources/calendars.js.map +1 -0
  79. package/dist/resources/schemas.d.ts +4 -0
  80. package/dist/resources/schemas.d.ts.map +1 -0
  81. package/dist/resources/schemas.js +34 -0
  82. package/dist/resources/schemas.js.map +1 -0
  83. package/dist/server.d.ts +2 -0
  84. package/dist/server.d.ts.map +1 -0
  85. package/dist/server.js +243 -0
  86. package/dist/server.js.map +1 -0
  87. package/dist/src/auth/api-key-auth.d.ts +3 -0
  88. package/dist/src/auth/api-key-auth.d.ts.map +1 -0
  89. package/dist/src/auth/api-key-auth.js +53 -0
  90. package/dist/src/auth/api-key-auth.js.map +1 -0
  91. package/dist/src/auth/effective-user-context.d.ts +16 -0
  92. package/dist/src/auth/effective-user-context.d.ts.map +1 -0
  93. package/dist/src/auth/effective-user-context.js +9 -0
  94. package/dist/src/auth/effective-user-context.js.map +1 -0
  95. package/dist/src/auth/license-resolver.d.ts +6 -0
  96. package/dist/src/auth/license-resolver.d.ts.map +1 -0
  97. package/dist/src/auth/license-resolver.js +12 -0
  98. package/dist/src/auth/license-resolver.js.map +1 -0
  99. package/dist/src/auth/oauth-auth.d.ts +22 -0
  100. package/dist/src/auth/oauth-auth.d.ts.map +1 -0
  101. package/dist/src/auth/oauth-auth.js +34 -0
  102. package/dist/src/auth/oauth-auth.js.map +1 -0
  103. package/dist/src/auth/oauth-metadata.d.ts +10 -0
  104. package/dist/src/auth/oauth-metadata.d.ts.map +1 -0
  105. package/dist/src/auth/oauth-metadata.js +8 -0
  106. package/dist/src/auth/oauth-metadata.js.map +1 -0
  107. package/dist/src/auth/token-extraction.d.ts +2 -0
  108. package/dist/src/auth/token-extraction.d.ts.map +1 -0
  109. package/dist/src/auth/token-extraction.js +7 -0
  110. package/dist/src/auth/token-extraction.js.map +1 -0
  111. package/dist/src/clients/audit-client.d.ts +25 -0
  112. package/dist/src/clients/audit-client.d.ts.map +1 -0
  113. package/dist/src/clients/audit-client.js +37 -0
  114. package/dist/src/clients/audit-client.js.map +1 -0
  115. package/dist/src/clients/datamart-client.d.ts +16 -0
  116. package/dist/src/clients/datamart-client.d.ts.map +1 -0
  117. package/dist/src/clients/datamart-client.js +32 -0
  118. package/dist/src/clients/datamart-client.js.map +1 -0
  119. package/dist/src/clients/index.d.ts +18 -0
  120. package/dist/src/clients/index.d.ts.map +1 -0
  121. package/dist/src/clients/index.js +11 -0
  122. package/dist/src/clients/index.js.map +1 -0
  123. package/dist/src/clients/rest-client.d.ts +14 -0
  124. package/dist/src/clients/rest-client.d.ts.map +1 -0
  125. package/dist/src/clients/rest-client.js +29 -0
  126. package/dist/src/clients/rest-client.js.map +1 -0
  127. package/dist/src/logger.d.ts +3 -0
  128. package/dist/src/logger.d.ts.map +1 -0
  129. package/dist/src/logger.js +37 -0
  130. package/dist/src/logger.js.map +1 -0
  131. package/dist/src/prompts/portfolio-overview.d.ts +3 -0
  132. package/dist/src/prompts/portfolio-overview.d.ts.map +1 -0
  133. package/dist/src/prompts/portfolio-overview.js +21 -0
  134. package/dist/src/prompts/portfolio-overview.js.map +1 -0
  135. package/dist/src/prompts/project-status.d.ts +3 -0
  136. package/dist/src/prompts/project-status.d.ts.map +1 -0
  137. package/dist/src/prompts/project-status.js +24 -0
  138. package/dist/src/prompts/project-status.js.map +1 -0
  139. package/dist/src/prompts/risk-analysis.d.ts +3 -0
  140. package/dist/src/prompts/risk-analysis.d.ts.map +1 -0
  141. package/dist/src/prompts/risk-analysis.js +23 -0
  142. package/dist/src/prompts/risk-analysis.js.map +1 -0
  143. package/dist/src/prompts/team-workload.d.ts +3 -0
  144. package/dist/src/prompts/team-workload.d.ts.map +1 -0
  145. package/dist/src/prompts/team-workload.js +29 -0
  146. package/dist/src/prompts/team-workload.js.map +1 -0
  147. package/dist/src/resources/calendars.d.ts +4 -0
  148. package/dist/src/resources/calendars.d.ts.map +1 -0
  149. package/dist/src/resources/calendars.js +18 -0
  150. package/dist/src/resources/calendars.js.map +1 -0
  151. package/dist/src/resources/schemas.d.ts +4 -0
  152. package/dist/src/resources/schemas.d.ts.map +1 -0
  153. package/dist/src/resources/schemas.js +34 -0
  154. package/dist/src/resources/schemas.js.map +1 -0
  155. package/dist/src/server.d.ts +2 -0
  156. package/dist/src/server.d.ts.map +1 -0
  157. package/dist/src/server.js +213 -0
  158. package/dist/src/server.js.map +1 -0
  159. package/dist/src/tools/datamart.d.ts +17 -0
  160. package/dist/src/tools/datamart.d.ts.map +1 -0
  161. package/dist/src/tools/datamart.js +68 -0
  162. package/dist/src/tools/datamart.js.map +1 -0
  163. package/dist/src/tools/financials.d.ts +4 -0
  164. package/dist/src/tools/financials.d.ts.map +1 -0
  165. package/dist/src/tools/financials.js +50 -0
  166. package/dist/src/tools/financials.js.map +1 -0
  167. package/dist/src/tools/graphql-queries.d.ts +22 -0
  168. package/dist/src/tools/graphql-queries.d.ts.map +1 -0
  169. package/dist/src/tools/graphql-queries.js +26 -0
  170. package/dist/src/tools/graphql-queries.js.map +1 -0
  171. package/dist/src/tools/portfolio.d.ts +10 -0
  172. package/dist/src/tools/portfolio.d.ts.map +1 -0
  173. package/dist/src/tools/portfolio.js +54 -0
  174. package/dist/src/tools/portfolio.js.map +1 -0
  175. package/dist/src/tools/projects.d.ts +42 -0
  176. package/dist/src/tools/projects.d.ts.map +1 -0
  177. package/dist/src/tools/projects.js +73 -0
  178. package/dist/src/tools/projects.js.map +1 -0
  179. package/dist/src/tools/reference-data.d.ts +4 -0
  180. package/dist/src/tools/reference-data.d.ts.map +1 -0
  181. package/dist/src/tools/reference-data.js +19 -0
  182. package/dist/src/tools/reference-data.js.map +1 -0
  183. package/dist/src/tools/risks-issues.d.ts +4 -0
  184. package/dist/src/tools/risks-issues.d.ts.map +1 -0
  185. package/dist/src/tools/risks-issues.js +33 -0
  186. package/dist/src/tools/risks-issues.js.map +1 -0
  187. package/dist/src/tools/services.d.ts +41 -0
  188. package/dist/src/tools/services.d.ts.map +1 -0
  189. package/dist/src/tools/services.js +67 -0
  190. package/dist/src/tools/services.js.map +1 -0
  191. package/dist/src/tools/tasks.d.ts +4 -0
  192. package/dist/src/tools/tasks.d.ts.map +1 -0
  193. package/dist/src/tools/tasks.js +17 -0
  194. package/dist/src/tools/tasks.js.map +1 -0
  195. package/dist/src/tools/users.d.ts +4 -0
  196. package/dist/src/tools/users.d.ts.map +1 -0
  197. package/dist/src/tools/users.js +30 -0
  198. package/dist/src/tools/users.js.map +1 -0
  199. package/dist/src/tools/write-tools.d.ts +75 -0
  200. package/dist/src/tools/write-tools.d.ts.map +1 -0
  201. package/dist/src/tools/write-tools.js +193 -0
  202. package/dist/src/tools/write-tools.js.map +1 -0
  203. package/dist/src/validation/query-validator.d.ts +15 -0
  204. package/dist/src/validation/query-validator.d.ts.map +1 -0
  205. package/dist/src/validation/query-validator.js +141 -0
  206. package/dist/src/validation/query-validator.js.map +1 -0
  207. package/dist/startup-mode.d.ts +13 -0
  208. package/dist/startup-mode.d.ts.map +1 -0
  209. package/dist/startup-mode.js +17 -0
  210. package/dist/startup-mode.js.map +1 -0
  211. package/dist/tools/datamart.d.ts +17 -0
  212. package/dist/tools/datamart.d.ts.map +1 -0
  213. package/dist/tools/datamart.js +68 -0
  214. package/dist/tools/datamart.js.map +1 -0
  215. package/dist/tools/financials.d.ts +4 -0
  216. package/dist/tools/financials.d.ts.map +1 -0
  217. package/dist/tools/financials.js +50 -0
  218. package/dist/tools/financials.js.map +1 -0
  219. package/dist/tools/graphql-queries.d.ts +22 -0
  220. package/dist/tools/graphql-queries.d.ts.map +1 -0
  221. package/dist/tools/graphql-queries.js +26 -0
  222. package/dist/tools/graphql-queries.js.map +1 -0
  223. package/dist/tools/portfolio.d.ts +10 -0
  224. package/dist/tools/portfolio.d.ts.map +1 -0
  225. package/dist/tools/portfolio.js +54 -0
  226. package/dist/tools/portfolio.js.map +1 -0
  227. package/dist/tools/projects.d.ts +42 -0
  228. package/dist/tools/projects.d.ts.map +1 -0
  229. package/dist/tools/projects.js +73 -0
  230. package/dist/tools/projects.js.map +1 -0
  231. package/dist/tools/reference-data.d.ts +4 -0
  232. package/dist/tools/reference-data.d.ts.map +1 -0
  233. package/dist/tools/reference-data.js +20 -0
  234. package/dist/tools/reference-data.js.map +1 -0
  235. package/dist/tools/risks-issues.d.ts +4 -0
  236. package/dist/tools/risks-issues.d.ts.map +1 -0
  237. package/dist/tools/risks-issues.js +33 -0
  238. package/dist/tools/risks-issues.js.map +1 -0
  239. package/dist/tools/services.d.ts +41 -0
  240. package/dist/tools/services.d.ts.map +1 -0
  241. package/dist/tools/services.js +67 -0
  242. package/dist/tools/services.js.map +1 -0
  243. package/dist/tools/tasks.d.ts +4 -0
  244. package/dist/tools/tasks.d.ts.map +1 -0
  245. package/dist/tools/tasks.js +17 -0
  246. package/dist/tools/tasks.js.map +1 -0
  247. package/dist/tools/users.d.ts +4 -0
  248. package/dist/tools/users.d.ts.map +1 -0
  249. package/dist/tools/users.js +30 -0
  250. package/dist/tools/users.js.map +1 -0
  251. package/dist/tools/write-tools.d.ts +74 -0
  252. package/dist/tools/write-tools.d.ts.map +1 -0
  253. package/dist/tools/write-tools.js +342 -0
  254. package/dist/tools/write-tools.js.map +1 -0
  255. package/dist/validation/query-validator.d.ts +15 -0
  256. package/dist/validation/query-validator.d.ts.map +1 -0
  257. package/dist/validation/query-validator.js +141 -0
  258. package/dist/validation/query-validator.js.map +1 -0
  259. package/package.json +45 -0
@@ -0,0 +1,11 @@
1
+ import { createDataMartClient } from './datamart-client.js';
2
+ import { createRestClient } from './rest-client.js';
3
+ import { createNoOpAuditClient } from './audit-client.js';
4
+ export function createClients(config, audit) {
5
+ return {
6
+ datamart: createDataMartClient(config),
7
+ rest: createRestClient(config),
8
+ audit: audit ?? createNoOpAuditClient(),
9
+ };
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/clients/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAuB,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAmB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAoB,MAAM,mBAAmB,CAAC;AAe5E,MAAM,UAAU,aAAa,CAAC,MAAoB,EAAE,KAAmB;IACrE,OAAO;QACL,QAAQ,EAAE,oBAAoB,CAAC,MAAM,CAAC;QACtC,IAAI,EAAE,gBAAgB,CAAC,MAAM,CAAC;QAC9B,KAAK,EAAE,KAAK,IAAI,qBAAqB,EAAE;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { Logger } from 'pino';
2
+ export interface RestClientConfig {
3
+ apiUrl: string;
4
+ company: string;
5
+ authHeaders: Record<string, string>;
6
+ log?: Logger;
7
+ }
8
+ export interface RestClient {
9
+ get(path: string): Promise<unknown>;
10
+ post(path: string, body: unknown): Promise<unknown>;
11
+ patch(path: string, body: unknown): Promise<unknown>;
12
+ }
13
+ export declare function createRestClient(config: RestClientConfig): RestClient;
14
+ //# sourceMappingURL=rest-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.d.ts","sourceRoot":"","sources":["../../src/clients/rest-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtD;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAgCrE"}
@@ -0,0 +1,29 @@
1
+ export function createRestClient(config) {
2
+ const baseUrl = `${config.apiUrl}/v2/${config.company}`;
3
+ const headers = {
4
+ ...config.authHeaders,
5
+ 'Content-Type': 'application/json',
6
+ };
7
+ const log = config.log;
8
+ async function request(method, path, body) {
9
+ const start = Date.now();
10
+ const response = await fetch(`${baseUrl}/${path}`, {
11
+ method,
12
+ headers,
13
+ ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
14
+ });
15
+ if (!response.ok) {
16
+ log?.error({ method, path, status: response.status, ms: Date.now() - start }, 'REST request failed');
17
+ throw new Error(`REST request failed: ${response.status} ${response.statusText}`);
18
+ }
19
+ const result = await response.json();
20
+ log?.debug({ method, path, ms: Date.now() - start }, 'REST request OK');
21
+ return result;
22
+ }
23
+ return {
24
+ get: (path) => request('GET', path),
25
+ post: (path, body) => request('POST', path, body),
26
+ patch: (path, body) => request('PATCH', path, body),
27
+ };
28
+ }
29
+ //# sourceMappingURL=rest-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rest-client.js","sourceRoot":"","sources":["../../src/clients/rest-client.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;IACxD,MAAM,OAAO,GAA2B;QACtC,GAAG,MAAM,CAAC,WAAW;QACrB,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,KAAK,UAAU,OAAO,CAAC,MAAc,EAAE,IAAY,EAAE,IAAc;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,EAAE;YACjD,MAAM;YACN,OAAO;YACP,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9D,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACrG,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACrC,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,iBAAiB,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO;QACL,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;QAC3C,IAAI,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC;QAClE,KAAK,EAAE,CAAC,IAAY,EAAE,IAAa,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC;KACrE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function resolveRoute(url: string): string;
2
+ //# sourceMappingURL=gateway.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGhD"}
@@ -0,0 +1,6 @@
1
+ const GATEWAY_PREFIX = /^\/v2\/[\w-]+\/mcp(?=\/|$)/;
2
+ export function resolveRoute(url) {
3
+ const stripped = url.replace(GATEWAY_PREFIX, '');
4
+ return stripped || '/';
5
+ }
6
+ //# sourceMappingURL=gateway.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway.js","sourceRoot":"","sources":["../src/gateway.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,4BAA4B,CAAC;AAEpD,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,QAAQ,IAAI,GAAG,CAAC;AACzB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Logger } from 'pino';
3
+ import { type AuditClient } from './clients/audit-client.js';
4
+ interface InstrumentUserContext {
5
+ userId: number;
6
+ accountId: number;
7
+ aiClientId: string;
8
+ }
9
+ export declare function instrumentServer(server: McpServer, log: Logger, userCtx: InstrumentUserContext, auditClient: AuditClient): void;
10
+ export {};
11
+ //# sourceMappingURL=instrument-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrument-server.d.ts","sourceRoot":"","sources":["../src/instrument-server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7E,UAAU,qBAAqB;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,EACjB,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,qBAAqB,EAC9B,WAAW,EAAE,WAAW,GACvB,IAAI,CAsDN"}
@@ -0,0 +1,51 @@
1
+ import { hashParameters } from './clients/audit-client.js';
2
+ export function instrumentServer(server, log, userCtx, auditClient) {
3
+ const original = server.registerTool.bind(server);
4
+ server.registerTool = (name, config, cb) => {
5
+ const wrappedCb = async (args, extra) => {
6
+ const start = Date.now();
7
+ log.info({ tool: name, userId: userCtx.userId, aiClientId: userCtx.aiClientId }, 'Tool invoked');
8
+ try {
9
+ const result = await cb(args, extra);
10
+ const durationMs = Date.now() - start;
11
+ const isError = result?.isError === true;
12
+ if (isError) {
13
+ log.error({ tool: name, durationMs }, 'Tool failed');
14
+ }
15
+ else {
16
+ log.debug({ tool: name, durationMs }, 'Tool completed');
17
+ }
18
+ auditClient.log({
19
+ timestamp: new Date().toISOString(),
20
+ userId: userCtx.userId,
21
+ accountId: userCtx.accountId,
22
+ toolName: name,
23
+ parametersHash: hashParameters(args ?? {}),
24
+ success: !isError,
25
+ error: isError ? result.content?.[0]?.text : undefined,
26
+ aiClientId: userCtx.aiClientId,
27
+ durationMs,
28
+ }).catch(() => { });
29
+ return result;
30
+ }
31
+ catch (err) {
32
+ const durationMs = Date.now() - start;
33
+ log.error({ tool: name, err, durationMs }, 'Tool failed');
34
+ auditClient.log({
35
+ timestamp: new Date().toISOString(),
36
+ userId: userCtx.userId,
37
+ accountId: userCtx.accountId,
38
+ toolName: name,
39
+ parametersHash: hashParameters(args ?? {}),
40
+ success: false,
41
+ error: err instanceof Error ? err.message : String(err),
42
+ aiClientId: userCtx.aiClientId,
43
+ durationMs,
44
+ }).catch(() => { });
45
+ throw err;
46
+ }
47
+ };
48
+ return original(name, config, wrappedCb);
49
+ };
50
+ }
51
+ //# sourceMappingURL=instrument-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instrument-server.js","sourceRoot":"","sources":["../src/instrument-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type Logger } from 'pino';
2
+ export declare const LOG_FILE: string;
3
+ export declare function createLogger(service: string): Logger;
4
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAa,EAAE,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AAOzC,eAAO,MAAM,QAAQ,QAA2B,CAAC;AAEjD,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAiCpD"}
package/dist/logger.js ADDED
@@ -0,0 +1,39 @@
1
+ import pino from 'pino';
2
+ import { mkdirSync } from 'node:fs';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ const APP_DIR = resolve(dirname(fileURLToPath(import.meta.url)), '..');
6
+ const LOG_DIR = join(APP_DIR, 'logs');
7
+ export const LOG_FILE = join(LOG_DIR, 'mcp.log');
8
+ export function createLogger(service) {
9
+ const level = process.env.LOG_LEVEL || 'info';
10
+ const isTest = process.env.NODE_ENV === 'test';
11
+ const targets = [
12
+ {
13
+ target: 'pino-pretty',
14
+ options: {
15
+ singleLine: true,
16
+ translateTime: 'HH:MM:ss.l',
17
+ ignore: 'pid,hostname',
18
+ colorize: true,
19
+ destination: 2,
20
+ },
21
+ level,
22
+ },
23
+ ];
24
+ if (!isTest) {
25
+ mkdirSync(LOG_DIR, { recursive: true });
26
+ targets.push({
27
+ target: 'pino-roll',
28
+ options: { file: LOG_FILE, size: '10m', limit: { count: 5 } },
29
+ level,
30
+ });
31
+ }
32
+ return pino({
33
+ level,
34
+ base: { service, app: 'ITM.MCP' },
35
+ timestamp: pino.stdTimeFunctions.isoTime,
36
+ transport: { targets },
37
+ });
38
+ }
39
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAqB,MAAM,MAAM,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AAEjD,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,CAAC;IAE/C,MAAM,OAAO,GAAkC;QAC7C;YACE,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,UAAU,EAAE,IAAI;gBAChB,aAAa,EAAE,YAAY;gBAC3B,MAAM,EAAE,cAAc;gBACtB,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,CAAC;aACf;YACD,KAAK;SACN;KACF,CAAC;IAEF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxC,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,WAAW;YACnB,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC7D,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;QACV,KAAK;QACL,IAAI,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE;QACjC,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;QACxC,SAAS,EAAE,EAAE,OAAO,EAAE;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerPortfolioOverviewPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=portfolio-overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio-overview.d.ts","sourceRoot":"","sources":["../../src/prompts/portfolio-overview.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,QAuBhE"}
@@ -0,0 +1,21 @@
1
+ export function registerPortfolioOverviewPrompt(server) {
2
+ server.registerPrompt('portfolio_overview', {
3
+ description: 'Portfolio health overview. Aggregates projects by status and methodology, summarizes budget variance.',
4
+ }, async () => ({
5
+ messages: [{
6
+ role: 'user',
7
+ content: {
8
+ type: 'text',
9
+ text: `Generate a portfolio health overview. Use these tools:
10
+ 1. aggregate_portfolio with groupBy: "statusLabel", metrics: ["count", "avgProgress"] to see project distribution by status
11
+ 2. aggregate_portfolio with groupBy: "methodology", metrics: ["count", "totalBudget", "totalActual"] to see methodology breakdown with financials
12
+ Then summarize:
13
+ - Total projects and status distribution
14
+ - Average progress by status
15
+ - Budget health across the portfolio (planned vs actual)
16
+ - Any concerning patterns (e.g., many projects behind schedule)`,
17
+ },
18
+ }],
19
+ }));
20
+ }
21
+ //# sourceMappingURL=portfolio-overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio-overview.js","sourceRoot":"","sources":["../../src/prompts/portfolio-overview.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,+BAA+B,CAAC,MAAiB;IAC/D,MAAM,CAAC,cAAc,CACnB,oBAAoB,EACpB;QACE,WAAW,EAAE,uGAAuG;KACrH,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;QACX,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE;;;;;;;gEAOgD;iBACvD;aACF,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerProjectStatusPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=project-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-status.d.ts","sourceRoot":"","sources":["../../src/prompts/project-status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,QAyB5D"}
@@ -0,0 +1,24 @@
1
+ import { z } from 'zod';
2
+ export function registerProjectStatusPrompt(server) {
3
+ server.registerPrompt('project_status', {
4
+ description: 'Generate a status report for a project. Fetches the project with tasks, risks, issues, and budget in one call.',
5
+ argsSchema: {
6
+ projectId: z.string().describe('The project ID to report on'),
7
+ },
8
+ }, async (args) => ({
9
+ messages: [{
10
+ role: 'user',
11
+ content: {
12
+ type: 'text',
13
+ text: `Generate a comprehensive status report for project ${args.projectId}. Use the get_project tool with include: ["tasks", "risks", "issues", "budget"] to fetch all data in one call. Then summarize:
14
+ 1. Overall status and progress
15
+ 2. Key task status breakdown (not started / in progress / completed)
16
+ 3. Active risks and their mitigation status
17
+ 4. Open issues
18
+ 5. Budget health (planned vs actual)
19
+ 6. Key concerns or blockers`,
20
+ },
21
+ }],
22
+ }));
23
+ }
24
+ //# sourceMappingURL=project-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-status.js","sourceRoot":"","sources":["../../src/prompts/project-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,cAAc,CACnB,gBAAgB,EAChB;QACE,WAAW,EAAE,gHAAgH;QAC7H,UAAU,EAAE;YACV,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;SAC9D;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACf,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,sDAAsD,IAAI,CAAC,SAAS;;;;;;4BAMxD;iBACnB;aACF,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerRiskAnalysisPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=risk-analysis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-analysis.d.ts","sourceRoot":"","sources":["../../src/prompts/risk-analysis.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QAwB3D"}
@@ -0,0 +1,23 @@
1
+ import { z } from 'zod';
2
+ export function registerRiskAnalysisPrompt(server) {
3
+ server.registerPrompt('risk_analysis', {
4
+ description: 'Risk assessment for a project. Fetches risks, issues, and budget data to analyze risk exposure.',
5
+ argsSchema: {
6
+ projectId: z.string().describe('The project ID to analyze'),
7
+ },
8
+ }, async (args) => ({
9
+ messages: [{
10
+ role: 'user',
11
+ content: {
12
+ type: 'text',
13
+ text: `Perform a risk assessment for project ${args.projectId}. Use the get_project tool with include: ["risks", "issues", "budget"] to fetch all relevant data. Then analyze:
14
+ 1. Active risks: probability, impact, and mitigation status
15
+ 2. Open issues: severity and resolution progress
16
+ 3. Budget risk: variance between planned and actual
17
+ 4. Overall risk exposure rating (low/medium/high/critical)
18
+ 5. Recommended actions for the top risks`,
19
+ },
20
+ }],
21
+ }));
22
+ }
23
+ //# sourceMappingURL=risk-analysis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"risk-analysis.js","sourceRoot":"","sources":["../../src/prompts/risk-analysis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,cAAc,CACnB,eAAe,EACf;QACE,WAAW,EAAE,iGAAiG;QAC9G,UAAU,EAAE;YACV,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;SAC5D;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QACf,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE;oBACP,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,yCAAyC,IAAI,CAAC,SAAS;;;;;yCAK9B;iBAChC;aACF,CAAC;KACH,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export declare function registerTeamWorkloadPrompt(server: McpServer): void;
3
+ //# sourceMappingURL=team-workload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-workload.d.ts","sourceRoot":"","sources":["../../src/prompts/team-workload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QA+B3D"}
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ export function registerTeamWorkloadPrompt(server) {
3
+ server.registerPrompt('team_workload', {
4
+ description: 'Team workload overview. Shows user assignments and project involvement.',
5
+ argsSchema: {
6
+ userId: z.string().optional().describe('Optional: specific user ID to focus on'),
7
+ },
8
+ }, async (args) => {
9
+ const userFilter = args.userId
10
+ ? ` Focus on user ${args.userId} -- use get_user to get their details first.`
11
+ : ' Get a broad view of the team.';
12
+ return {
13
+ messages: [{
14
+ role: 'user',
15
+ content: {
16
+ type: 'text',
17
+ text: `Generate a team workload overview.${userFilter} Use these tools:
18
+ 1. search_users to find team members
19
+ 2. search_projects to see active projects and their managers
20
+ Then summarize:
21
+ - Who is assigned to what
22
+ - Which projects have the most team involvement
23
+ - Any potential overload or underutilization patterns`,
24
+ },
25
+ }],
26
+ };
27
+ });
28
+ }
29
+ //# sourceMappingURL=team-workload.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"team-workload.js","sourceRoot":"","sources":["../../src/prompts/team-workload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,cAAc,CACnB,eAAe,EACf;QACE,WAAW,EAAE,yEAAyE;QACtF,UAAU,EAAE;YACV,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;SACjF;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM;YAC5B,CAAC,CAAC,kBAAkB,IAAI,CAAC,MAAM,8CAA8C;YAC7E,CAAC,CAAC,gCAAgC,CAAC;QAErC,OAAO;YACL,QAAQ,EAAE,CAAC;oBACT,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,qCAAqC,UAAU;;;;;;sDAMX;qBAC3C;iBACF,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Clients } from '../clients/index.js';
3
+ export declare function registerCalendarResources(server: McpServer, clients: Clients): void;
4
+ //# sourceMappingURL=calendars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendars.d.ts","sourceRoot":"","sources":["../../src/resources/calendars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAoB,MAAM,yCAAyC,CAAC;AACtF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,QAoB5E"}
@@ -0,0 +1,18 @@
1
+ import { ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ export function registerCalendarResources(server, clients) {
3
+ server.registerResource('calendar', new ResourceTemplate('itm://calendars/{projectId}', { list: undefined }), {
4
+ description: 'Holiday calendar and work hours for a project',
5
+ mimeType: 'application/json',
6
+ }, async (_uri, variables) => {
7
+ const projectId = variables.projectId;
8
+ const data = await clients.rest.get(`holidays`);
9
+ return {
10
+ contents: [{
11
+ uri: `itm://calendars/${projectId}`,
12
+ mimeType: 'application/json',
13
+ text: JSON.stringify(data, null, 2),
14
+ }],
15
+ };
16
+ });
17
+ }
18
+ //# sourceMappingURL=calendars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendars.js","sourceRoot":"","sources":["../../src/resources/calendars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAGtF,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,OAAgB;IAC3E,MAAM,CAAC,gBAAgB,CACrB,UAAU,EACV,IAAI,gBAAgB,CAAC,6BAA6B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EACxE;QACE,WAAW,EAAE,+CAA+C;QAC5D,QAAQ,EAAE,kBAAkB;KAC7B,EACD,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE;QACxB,MAAM,SAAS,GAAG,SAAS,CAAC,SAAmB,CAAC;QAChD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAChD,OAAO;YACL,QAAQ,EAAE,CAAC;oBACT,GAAG,EAAE,mBAAmB,SAAS,EAAE;oBACnC,QAAQ,EAAE,kBAAkB;oBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;iBACpC,CAAC;SACH,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { Clients } from '../clients/index.js';
3
+ export declare function registerSchemaResources(server: McpServer, clients: Clients): void;
4
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/resources/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAoBnD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,QAsB1E"}
@@ -0,0 +1,34 @@
1
+ const SCHEMA_ENTITIES = ['component', 'task', 'purchase', 'risk', 'issue'];
2
+ const SCHEMA_URI_MAP = {
3
+ component: 'itm://schema/component',
4
+ task: 'itm://schema/tasks',
5
+ purchase: 'itm://schema/purchases',
6
+ risk: 'itm://schema/risks',
7
+ issue: 'itm://schema/issues',
8
+ };
9
+ const SCHEMA_DESCRIPTIONS = {
10
+ component: 'DataMart component schema (projects/services) -- available fields, types, and enums',
11
+ task: 'DataMart task schema -- fields available on task subcomponents',
12
+ purchase: 'DataMart purchase schema -- fields available on purchase subcomponents',
13
+ risk: 'DataMart risk schema -- fields available on risk subcomponents',
14
+ issue: 'DataMart issue schema -- fields available on issue subcomponents',
15
+ };
16
+ export function registerSchemaResources(server, clients) {
17
+ for (const entity of SCHEMA_ENTITIES) {
18
+ const uri = SCHEMA_URI_MAP[entity];
19
+ server.registerResource(`schema-${entity}`, uri, {
20
+ description: SCHEMA_DESCRIPTIONS[entity],
21
+ mimeType: 'application/json',
22
+ }, async () => {
23
+ const data = await clients.rest.get(`datamart/api/schema/${entity}`);
24
+ return {
25
+ contents: [{
26
+ uri,
27
+ mimeType: 'application/json',
28
+ text: JSON.stringify(data, null, 2),
29
+ }],
30
+ };
31
+ });
32
+ }
33
+ }
34
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/resources/schemas.ts"],"names":[],"mappings":"AAGA,MAAM,eAAe,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAU,CAAC;AAEpF,MAAM,cAAc,GAA2B;IAC7C,SAAS,EAAE,wBAAwB;IACnC,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,wBAAwB;IAClC,IAAI,EAAE,oBAAoB;IAC1B,KAAK,EAAE,qBAAqB;CAC7B,CAAC;AAEF,MAAM,mBAAmB,GAA2B;IAClD,SAAS,EAAE,qFAAqF;IAChG,IAAI,EAAE,gEAAgE;IACtE,QAAQ,EAAE,wEAAwE;IAClF,IAAI,EAAE,gEAAgE;IACtE,KAAK,EAAE,kEAAkE;CAC1E,CAAC;AAEF,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,OAAgB;IACzE,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;QACnC,MAAM,CAAC,gBAAgB,CACrB,UAAU,MAAM,EAAE,EAClB,GAAG,EACH;YACE,WAAW,EAAE,mBAAmB,CAAC,MAAM,CAAC;YACxC,QAAQ,EAAE,kBAAkB;SAC7B,EACD,KAAK,IAAI,EAAE;YACT,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,uBAAuB,MAAM,EAAE,CAAC,CAAC;YACrE,OAAO;gBACL,QAAQ,EAAE,CAAC;wBACT,GAAG;wBACH,QAAQ,EAAE,kBAAkB;wBAC5B,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;qBACpC,CAAC;aACH,CAAC;QACJ,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}