@itm-platform/mcp-server 1.0.3 → 1.0.8

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 (192) hide show
  1. package/README.md +15 -10
  2. package/dist/auth/api-key-auth.d.ts.map +1 -1
  3. package/dist/auth/api-key-auth.js +0 -3
  4. package/dist/auth/api-key-auth.js.map +1 -1
  5. package/dist/auth/token-refresh.d.ts +4 -0
  6. package/dist/auth/token-refresh.d.ts.map +1 -0
  7. package/dist/auth/token-refresh.js +28 -0
  8. package/dist/auth/token-refresh.js.map +1 -0
  9. package/dist/clients/audit-client.d.ts +2 -0
  10. package/dist/clients/audit-client.d.ts.map +1 -1
  11. package/dist/clients/audit-client.js +4 -4
  12. package/dist/clients/audit-client.js.map +1 -1
  13. package/dist/clients/datamart-client.d.ts +1 -0
  14. package/dist/clients/datamart-client.d.ts.map +1 -1
  15. package/dist/clients/datamart-client.js +20 -6
  16. package/dist/clients/datamart-client.js.map +1 -1
  17. package/dist/clients/index.d.ts +1 -0
  18. package/dist/clients/index.d.ts.map +1 -1
  19. package/dist/clients/index.js.map +1 -1
  20. package/dist/clients/rest-client.d.ts +1 -0
  21. package/dist/clients/rest-client.d.ts.map +1 -1
  22. package/dist/clients/rest-client.js +16 -6
  23. package/dist/clients/rest-client.js.map +1 -1
  24. package/dist/instrument-server.d.ts +2 -1
  25. package/dist/instrument-server.d.ts.map +1 -1
  26. package/dist/instrument-server.js +14 -3
  27. package/dist/instrument-server.js.map +1 -1
  28. package/dist/prompts/project-status.d.ts.map +1 -1
  29. package/dist/prompts/project-status.js +7 -2
  30. package/dist/prompts/project-status.js.map +1 -1
  31. package/dist/prompts/risk-analysis.d.ts.map +1 -1
  32. package/dist/prompts/risk-analysis.js +5 -1
  33. package/dist/prompts/risk-analysis.js.map +1 -1
  34. package/dist/server.js +35 -4
  35. package/dist/server.js.map +1 -1
  36. package/dist/tools/datamart.d.ts.map +1 -1
  37. package/dist/tools/datamart.js +3 -1
  38. package/dist/tools/datamart.js.map +1 -1
  39. package/dist/tools/financials.d.ts.map +1 -1
  40. package/dist/tools/financials.js +11 -16
  41. package/dist/tools/financials.js.map +1 -1
  42. package/dist/tools/graphql-queries.d.ts +1 -0
  43. package/dist/tools/graphql-queries.d.ts.map +1 -1
  44. package/dist/tools/graphql-queries.js +16 -0
  45. package/dist/tools/graphql-queries.js.map +1 -1
  46. package/dist/tools/projects.d.ts +22 -0
  47. package/dist/tools/projects.d.ts.map +1 -1
  48. package/dist/tools/projects.js +25 -12
  49. package/dist/tools/projects.js.map +1 -1
  50. package/dist/tools/risks-issues.d.ts.map +1 -1
  51. package/dist/tools/risks-issues.js +11 -17
  52. package/dist/tools/risks-issues.js.map +1 -1
  53. package/dist/tools/services.d.ts +15 -0
  54. package/dist/tools/services.d.ts.map +1 -1
  55. package/dist/tools/services.js +70 -19
  56. package/dist/tools/services.js.map +1 -1
  57. package/dist/tools/subcomponent-page.d.ts +13 -0
  58. package/dist/tools/subcomponent-page.d.ts.map +1 -0
  59. package/dist/tools/subcomponent-page.js +46 -0
  60. package/dist/tools/subcomponent-page.js.map +1 -0
  61. package/dist/tools/tasks.d.ts.map +1 -1
  62. package/dist/tools/tasks.js +6 -7
  63. package/dist/tools/tasks.js.map +1 -1
  64. package/dist/validation/query-validator.d.ts +1 -0
  65. package/dist/validation/query-validator.d.ts.map +1 -1
  66. package/dist/validation/query-validator.js +25 -0
  67. package/dist/validation/query-validator.js.map +1 -1
  68. package/dist/validation/result-size-guard.d.ts +21 -0
  69. package/dist/validation/result-size-guard.d.ts.map +1 -0
  70. package/dist/validation/result-size-guard.js +38 -0
  71. package/dist/validation/result-size-guard.js.map +1 -0
  72. package/package.json +1 -1
  73. package/dist/src/auth/api-key-auth.d.ts +0 -3
  74. package/dist/src/auth/api-key-auth.d.ts.map +0 -1
  75. package/dist/src/auth/api-key-auth.js +0 -53
  76. package/dist/src/auth/api-key-auth.js.map +0 -1
  77. package/dist/src/auth/effective-user-context.d.ts +0 -16
  78. package/dist/src/auth/effective-user-context.d.ts.map +0 -1
  79. package/dist/src/auth/effective-user-context.js +0 -9
  80. package/dist/src/auth/effective-user-context.js.map +0 -1
  81. package/dist/src/auth/license-resolver.d.ts +0 -6
  82. package/dist/src/auth/license-resolver.d.ts.map +0 -1
  83. package/dist/src/auth/license-resolver.js +0 -12
  84. package/dist/src/auth/license-resolver.js.map +0 -1
  85. package/dist/src/auth/oauth-auth.d.ts +0 -22
  86. package/dist/src/auth/oauth-auth.d.ts.map +0 -1
  87. package/dist/src/auth/oauth-auth.js +0 -34
  88. package/dist/src/auth/oauth-auth.js.map +0 -1
  89. package/dist/src/auth/oauth-metadata.d.ts +0 -10
  90. package/dist/src/auth/oauth-metadata.d.ts.map +0 -1
  91. package/dist/src/auth/oauth-metadata.js +0 -8
  92. package/dist/src/auth/oauth-metadata.js.map +0 -1
  93. package/dist/src/auth/token-extraction.d.ts +0 -2
  94. package/dist/src/auth/token-extraction.d.ts.map +0 -1
  95. package/dist/src/auth/token-extraction.js +0 -7
  96. package/dist/src/auth/token-extraction.js.map +0 -1
  97. package/dist/src/clients/audit-client.d.ts +0 -25
  98. package/dist/src/clients/audit-client.d.ts.map +0 -1
  99. package/dist/src/clients/audit-client.js +0 -37
  100. package/dist/src/clients/audit-client.js.map +0 -1
  101. package/dist/src/clients/datamart-client.d.ts +0 -16
  102. package/dist/src/clients/datamart-client.d.ts.map +0 -1
  103. package/dist/src/clients/datamart-client.js +0 -32
  104. package/dist/src/clients/datamart-client.js.map +0 -1
  105. package/dist/src/clients/index.d.ts +0 -18
  106. package/dist/src/clients/index.d.ts.map +0 -1
  107. package/dist/src/clients/index.js +0 -11
  108. package/dist/src/clients/index.js.map +0 -1
  109. package/dist/src/clients/rest-client.d.ts +0 -14
  110. package/dist/src/clients/rest-client.d.ts.map +0 -1
  111. package/dist/src/clients/rest-client.js +0 -29
  112. package/dist/src/clients/rest-client.js.map +0 -1
  113. package/dist/src/logger.d.ts +0 -3
  114. package/dist/src/logger.d.ts.map +0 -1
  115. package/dist/src/logger.js +0 -37
  116. package/dist/src/logger.js.map +0 -1
  117. package/dist/src/prompts/portfolio-overview.d.ts +0 -3
  118. package/dist/src/prompts/portfolio-overview.d.ts.map +0 -1
  119. package/dist/src/prompts/portfolio-overview.js +0 -21
  120. package/dist/src/prompts/portfolio-overview.js.map +0 -1
  121. package/dist/src/prompts/project-status.d.ts +0 -3
  122. package/dist/src/prompts/project-status.d.ts.map +0 -1
  123. package/dist/src/prompts/project-status.js +0 -24
  124. package/dist/src/prompts/project-status.js.map +0 -1
  125. package/dist/src/prompts/risk-analysis.d.ts +0 -3
  126. package/dist/src/prompts/risk-analysis.d.ts.map +0 -1
  127. package/dist/src/prompts/risk-analysis.js +0 -23
  128. package/dist/src/prompts/risk-analysis.js.map +0 -1
  129. package/dist/src/prompts/team-workload.d.ts +0 -3
  130. package/dist/src/prompts/team-workload.d.ts.map +0 -1
  131. package/dist/src/prompts/team-workload.js +0 -29
  132. package/dist/src/prompts/team-workload.js.map +0 -1
  133. package/dist/src/resources/calendars.d.ts +0 -4
  134. package/dist/src/resources/calendars.d.ts.map +0 -1
  135. package/dist/src/resources/calendars.js +0 -18
  136. package/dist/src/resources/calendars.js.map +0 -1
  137. package/dist/src/resources/schemas.d.ts +0 -4
  138. package/dist/src/resources/schemas.d.ts.map +0 -1
  139. package/dist/src/resources/schemas.js +0 -34
  140. package/dist/src/resources/schemas.js.map +0 -1
  141. package/dist/src/server.d.ts +0 -2
  142. package/dist/src/server.d.ts.map +0 -1
  143. package/dist/src/server.js +0 -213
  144. package/dist/src/server.js.map +0 -1
  145. package/dist/src/tools/datamart.d.ts +0 -17
  146. package/dist/src/tools/datamart.d.ts.map +0 -1
  147. package/dist/src/tools/datamart.js +0 -68
  148. package/dist/src/tools/datamart.js.map +0 -1
  149. package/dist/src/tools/financials.d.ts +0 -4
  150. package/dist/src/tools/financials.d.ts.map +0 -1
  151. package/dist/src/tools/financials.js +0 -50
  152. package/dist/src/tools/financials.js.map +0 -1
  153. package/dist/src/tools/graphql-queries.d.ts +0 -22
  154. package/dist/src/tools/graphql-queries.d.ts.map +0 -1
  155. package/dist/src/tools/graphql-queries.js +0 -26
  156. package/dist/src/tools/graphql-queries.js.map +0 -1
  157. package/dist/src/tools/portfolio.d.ts +0 -10
  158. package/dist/src/tools/portfolio.d.ts.map +0 -1
  159. package/dist/src/tools/portfolio.js +0 -54
  160. package/dist/src/tools/portfolio.js.map +0 -1
  161. package/dist/src/tools/projects.d.ts +0 -42
  162. package/dist/src/tools/projects.d.ts.map +0 -1
  163. package/dist/src/tools/projects.js +0 -73
  164. package/dist/src/tools/projects.js.map +0 -1
  165. package/dist/src/tools/reference-data.d.ts +0 -4
  166. package/dist/src/tools/reference-data.d.ts.map +0 -1
  167. package/dist/src/tools/reference-data.js +0 -19
  168. package/dist/src/tools/reference-data.js.map +0 -1
  169. package/dist/src/tools/risks-issues.d.ts +0 -4
  170. package/dist/src/tools/risks-issues.d.ts.map +0 -1
  171. package/dist/src/tools/risks-issues.js +0 -33
  172. package/dist/src/tools/risks-issues.js.map +0 -1
  173. package/dist/src/tools/services.d.ts +0 -41
  174. package/dist/src/tools/services.d.ts.map +0 -1
  175. package/dist/src/tools/services.js +0 -67
  176. package/dist/src/tools/services.js.map +0 -1
  177. package/dist/src/tools/tasks.d.ts +0 -4
  178. package/dist/src/tools/tasks.d.ts.map +0 -1
  179. package/dist/src/tools/tasks.js +0 -17
  180. package/dist/src/tools/tasks.js.map +0 -1
  181. package/dist/src/tools/users.d.ts +0 -4
  182. package/dist/src/tools/users.d.ts.map +0 -1
  183. package/dist/src/tools/users.js +0 -30
  184. package/dist/src/tools/users.js.map +0 -1
  185. package/dist/src/tools/write-tools.d.ts +0 -75
  186. package/dist/src/tools/write-tools.d.ts.map +0 -1
  187. package/dist/src/tools/write-tools.js +0 -193
  188. package/dist/src/tools/write-tools.js.map +0 -1
  189. package/dist/src/validation/query-validator.d.ts +0 -15
  190. package/dist/src/validation/query-validator.d.ts.map +0 -1
  191. package/dist/src/validation/query-validator.js +0 -141
  192. package/dist/src/validation/query-validator.js.map +0 -1
@@ -1,17 +1,16 @@
1
1
  import { z } from 'zod';
2
- import { COMPONENT_QUERY } from './graphql-queries.js';
2
+ import { fetchSubcomponentPage } from './subcomponent-page.js';
3
3
  export function registerTaskTools(server, clients) {
4
4
  server.registerTool('list_project_tasks', {
5
- description: 'List all tasks for a project. Returns task details: taskId, name, statusLabel, priorityLabel, assignedTo, startDate, endDate, percentComplete.',
5
+ description: 'List tasks for a project with pagination. Returns { items, total, limit, skip, hasMore }. Default limit: 50, max: 200.',
6
6
  inputSchema: {
7
7
  projectId: z.number().describe('The project ID'),
8
+ limit: z.number().optional().describe('Max tasks to return (default 50, max 200)'),
9
+ skip: z.number().optional().describe('Number of tasks to skip (for pagination)'),
8
10
  },
9
11
  }, async (args) => {
10
- const variables = { id: args.projectId, proj: { tasks: 1 } };
11
- const data = await clients.datamart.query({ query: COMPONENT_QUERY, variables });
12
- const component = data.component;
13
- const tasks = (component?.tasks ?? []);
14
- return { content: [{ type: 'text', text: JSON.stringify(tasks, null, 2) }] };
12
+ const page = await fetchSubcomponentPage(clients, args.projectId, 'tasks', args.limit, args.skip);
13
+ return { content: [{ type: 'text', text: JSON.stringify(page, null, 2) }] };
15
14
  });
16
15
  }
17
16
  //# sourceMappingURL=tasks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,OAAgB;IACnE,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,gJAAgJ;QAC7J,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACjD;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,SAAS,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;QACjF,MAAM,SAAS,GAAG,IAAI,CAAC,SAA2C,CAAC;QACnE,MAAM,KAAK,GAAG,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE,CAAc,CAAC;QACpD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACxF,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"tasks.js","sourceRoot":"","sources":["../../src/tools/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,OAAgB;IACnE,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,wHAAwH;QACrI,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;YAClF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;SACjF;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,qBAAqB,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAClG,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACvF,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -10,6 +10,7 @@ interface DataMartBody {
10
10
  query?: string;
11
11
  variables?: Record<string, unknown>;
12
12
  }
13
+ export declare const HEAVY_ARRAY_FIELDS: Set<string>;
13
14
  export declare function validateDataMartQuery(body: DataMartBody | null | undefined): ValidationResult;
14
15
  export {};
15
16
  //# sourceMappingURL=query-validator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query-validator.d.ts","sourceRoot":"","sources":["../../src/validation/query-validator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAiGD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,CA8C7F"}
1
+ {"version":3,"file":"query-validator.d.ts","sourceRoot":"","sources":["../../src/validation/query-validator.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,YAAY;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAED,eAAO,MAAM,kBAAkB,aAE7B,CAAC;AAiHH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,GAAG,SAAS,GAAG,gBAAgB,CAoD7F"}
@@ -4,6 +4,9 @@
4
4
  // Differences from PMPilot's copy:
5
5
  // - TypeScript types
6
6
  // - Adds $not to ALLOWED_WHERE_OPERATORS (allowed by DataMart's validate.ts)
7
+ export const HEAVY_ARRAY_FIELDS = new Set([
8
+ 'tasks', 'purchases', 'revenues', 'risks', 'issues', 'activities',
9
+ ]);
7
10
  const ALLOWED_WHERE_OPERATORS = new Set([
8
11
  '$eq', '$ne', '$in', '$nin', '$gt', '$gte', '$lt', '$lte',
9
12
  '$regex', '$options', '$exists', '$not', '$and', '$or', '$nor',
@@ -93,6 +96,22 @@ function validatePipeline(pipeline) {
93
96
  }
94
97
  return { ok: true };
95
98
  }
99
+ function validateProjection(proj) {
100
+ if (proj == null || typeof proj !== 'object')
101
+ return { ok: true };
102
+ for (const [key, value] of Object.entries(proj)) {
103
+ if (HEAVY_ARRAY_FIELDS.has(key) && value === 1) {
104
+ return {
105
+ ok: false,
106
+ error: {
107
+ code: 'CLIENT_VALIDATION',
108
+ message: `Projection "${key}: 1" returns the full embedded array and may be too large. Use dot notation like "${key}.id": 1, "${key}.name": 1, or use the dedicated subcomponent tool with limit/skip.`,
109
+ },
110
+ };
111
+ }
112
+ }
113
+ return { ok: true };
114
+ }
96
115
  export function validateDataMartQuery(body) {
97
116
  if (!body || typeof body !== 'object')
98
117
  return { ok: true };
@@ -101,6 +120,12 @@ export function validateDataMartQuery(body) {
101
120
  if (selectsJsonSubfields(query)) {
102
121
  return { ok: false, error: { code: 'CLIENT_VALIDATION', message: 'Do not select subfields of JSON; project fields via variables (proj / w / p) instead.' } };
103
122
  }
123
+ const proj = variables.proj ?? variables.project;
124
+ if (proj) {
125
+ const projRes = validateProjection(proj);
126
+ if (!projRes.ok)
127
+ return projRes;
128
+ }
104
129
  if (isAggregateQuery(query)) {
105
130
  const pipeline = variables.p ?? variables.pipeline;
106
131
  const res = validatePipeline(pipeline);
@@ -1 +1 @@
1
- {"version":3,"file":"query-validator.js","sourceRoot":"","sources":["../../src/validation/query-validator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query-validator.js","sourceRoot":"","sources":["../../src/validation/query-validator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface ResultSizeGuardConfig {
2
+ warnBytes?: number;
3
+ hardBytes?: number;
4
+ }
5
+ interface ContentItem {
6
+ type: string;
7
+ text?: string;
8
+ }
9
+ interface ToolResult {
10
+ content: ContentItem[];
11
+ isError?: boolean;
12
+ }
13
+ export interface GuardResult {
14
+ result: ToolResult;
15
+ responseBytes: number;
16
+ wasTruncated: boolean;
17
+ warning?: string;
18
+ }
19
+ export declare function guardResultSize(result: ToolResult, config?: ResultSizeGuardConfig): GuardResult;
20
+ export {};
21
+ //# sourceMappingURL=result-size-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-size-guard.d.ts","sourceRoot":"","sources":["../../src/validation/result-size-guard.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,WAAW;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,UAAU;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,qBAAqB,GAAG,WAAW,CAuC/F"}
@@ -0,0 +1,38 @@
1
+ const DEFAULT_WARN_BYTES = 50_000;
2
+ const DEFAULT_HARD_BYTES = 100_000;
3
+ export function guardResultSize(result, config) {
4
+ if (result.isError) {
5
+ return { result, responseBytes: 0, wasTruncated: false };
6
+ }
7
+ const warnBytes = config?.warnBytes ?? DEFAULT_WARN_BYTES;
8
+ const hardBytes = config?.hardBytes ?? DEFAULT_HARD_BYTES;
9
+ let totalBytes = 0;
10
+ for (const item of result.content) {
11
+ if (item.type === 'text' && item.text) {
12
+ totalBytes += Buffer.byteLength(item.text, 'utf8');
13
+ }
14
+ }
15
+ if (totalBytes > hardBytes) {
16
+ return {
17
+ result: {
18
+ isError: true,
19
+ content: [{
20
+ type: 'text',
21
+ text: `Result too large (${totalBytes} bytes). Use the dedicated subcomponent tools with limit/skip and narrow fields.`,
22
+ }],
23
+ },
24
+ responseBytes: totalBytes,
25
+ wasTruncated: true,
26
+ };
27
+ }
28
+ if (totalBytes > warnBytes) {
29
+ return {
30
+ result,
31
+ responseBytes: totalBytes,
32
+ wasTruncated: false,
33
+ warning: `Large result: ${totalBytes} bytes (warn threshold: ${warnBytes})`,
34
+ };
35
+ }
36
+ return { result, responseBytes: totalBytes, wasTruncated: false };
37
+ }
38
+ //# sourceMappingURL=result-size-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-size-guard.js","sourceRoot":"","sources":["../../src/validation/result-size-guard.ts"],"names":[],"mappings":"AAsBA,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,MAAkB,EAAE,MAA8B;IAChF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAC1D,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,kBAAkB,CAAC;IAE1D,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACtC,UAAU,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;QAC3B,OAAO;YACL,MAAM,EAAE;gBACN,OAAO,EAAE,IAAI;gBACb,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE,qBAAqB,UAAU,kFAAkF;qBACxH,CAAC;aACH;YACD,aAAa,EAAE,UAAU;YACzB,YAAY,EAAE,IAAI;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,GAAG,SAAS,EAAE,CAAC;QAC3B,OAAO;YACL,MAAM;YACN,aAAa,EAAE,UAAU;YACzB,YAAY,EAAE,KAAK;YACnB,OAAO,EAAE,iBAAiB,UAAU,2BAA2B,SAAS,GAAG;SAC5E,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;AACpE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itm-platform/mcp-server",
3
- "version": "1.0.3",
3
+ "version": "1.0.8",
4
4
  "description": "MCP server for ITM Platform",
5
5
  "license": "MIT",
6
6
  "mcpName": "io.github.itmplatform/mcp-server",
@@ -1,3 +0,0 @@
1
- import { EffectiveUserContext } from './effective-user-context.js';
2
- export declare function resolveIdentity(): Promise<EffectiveUserContext>;
3
- //# sourceMappingURL=api-key-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-key-auth.d.ts","sourceRoot":"","sources":["../../../src/auth/api-key-auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AA0BnE,wBAAsB,eAAe,IAAI,OAAO,CAAC,oBAAoB,CAAC,CA6CrE"}
@@ -1,53 +0,0 @@
1
- import { resolveLicenseAccess } from './license-resolver.js';
2
- function resolveAuthHeaders() {
3
- const apiKey = process.env.ITM_API_KEY;
4
- const token = process.env.ITM_TOKEN;
5
- if (apiKey) {
6
- return { source: 'api-key', headers: { 'Authorization': `Bearer ${apiKey}` } };
7
- }
8
- if (token) {
9
- return { source: 'token', headers: { 'Token': token } };
10
- }
11
- throw new Error('Missing required environment variable: ITM_API_KEY or ITM_TOKEN');
12
- }
13
- export async function resolveIdentity() {
14
- const apiUrl = process.env.ITM_API_URL;
15
- const company = process.env.ITM_COMPANY;
16
- if (!apiUrl)
17
- throw new Error('Missing required environment variable: ITM_API_URL');
18
- if (!company)
19
- throw new Error('Missing required environment variable: ITM_COMPANY');
20
- const { source, headers: authHeaders } = resolveAuthHeaders();
21
- const url = `${apiUrl}/v2/${company}/resolve/identity`;
22
- const response = await fetch(url, {
23
- method: 'POST',
24
- headers: {
25
- ...authHeaders,
26
- 'Content-Type': 'application/json',
27
- },
28
- });
29
- if (!response.ok) {
30
- throw new Error(`Identity resolution failed: ${response.status} ${response.statusText}`);
31
- }
32
- const identity = await response.json();
33
- const { dataMartAccess, pmScopeUserId } = resolveLicenseAccess(identity.licenseTypeIds, identity.userId);
34
- if (dataMartAccess === 'pm-scoped') {
35
- throw new Error('PM-only access is not yet available for MCP. It will arrive with hosted MCP (Phase 2) or gateway scope injection.');
36
- }
37
- if (dataMartAccess === 'none') {
38
- throw new Error('Team Member access is not available for MCP.');
39
- }
40
- return {
41
- source,
42
- company,
43
- accountId: identity.accountId,
44
- userId: identity.userId,
45
- languageId: identity.languageId,
46
- email: identity.email,
47
- licenseTypeIds: identity.licenseTypeIds,
48
- dataMartAccess,
49
- pmScopeUserId,
50
- authHeaders,
51
- };
52
- }
53
- //# sourceMappingURL=api-key-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"api-key-auth.js","sourceRoot":"","sources":["../../../src/auth/api-key-auth.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAY7D,SAAS,kBAAkB;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC;IAEpC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,MAAM,EAAE,EAAE,EAAE,CAAC;IACjF,CAAC;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IACnF,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;IAEpF,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,kBAAkB,EAAE,CAAC;IAE9D,MAAM,GAAG,GAAG,GAAG,MAAM,OAAO,OAAO,mBAAmB,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAChC,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,GAAG,WAAW;YACd,cAAc,EAAE,kBAAkB;SACnC;KACF,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IAC3F,CAAC;IAED,MAAM,QAAQ,GAAqB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACzD,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,oBAAoB,CAAC,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEzG,IAAI,cAAc,KAAK,WAAW,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CACb,mHAAmH,CACpH,CAAC;IACJ,CAAC;IACD,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IAED,OAAO;QACL,MAAM;QACN,OAAO;QACP,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,KAAK,EAAE,QAAQ,CAAC,KAAK;QACrB,cAAc,EAAE,QAAQ,CAAC,cAAc;QACvC,cAAc;QACd,aAAa;QACb,WAAW;KACZ,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- export interface EffectiveUserContext {
2
- source: 'api-key' | 'token';
3
- company: string;
4
- accountId: number;
5
- userId: number;
6
- languageId: number;
7
- email: string;
8
- licenseTypeIds: number[];
9
- dataMartAccess: 'full' | 'pm-scoped' | 'none';
10
- pmScopeUserId?: number;
11
- authHeaders: Record<string, string>;
12
- grantedScopes?: string[];
13
- }
14
- export declare const WRITE_TOOL_NAMES: Set<string>;
15
- export declare function hasScope(ctx: EffectiveUserContext, scope: string): boolean;
16
- //# sourceMappingURL=effective-user-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effective-user-context.d.ts","sourceRoot":"","sources":["../../../src/auth/effective-user-context.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,gBAAgB,aAE3B,CAAC;AAEH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAG1E"}
@@ -1,9 +0,0 @@
1
- export const WRITE_TOOL_NAMES = new Set([
2
- 'create_task', 'update_task', 'create_risk', 'create_issue', 'update_project',
3
- ]);
4
- export function hasScope(ctx, scope) {
5
- if (!ctx.grantedScopes)
6
- return true;
7
- return ctx.grantedScopes.includes(scope);
8
- }
9
- //# sourceMappingURL=effective-user-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"effective-user-context.js","sourceRoot":"","sources":["../../../src/auth/effective-user-context.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IACtC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB;CAC9E,CAAC,CAAC;AAEH,MAAM,UAAU,QAAQ,CAAC,GAAyB,EAAE,KAAa;IAC/D,IAAI,CAAC,GAAG,CAAC,aAAa;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC3C,CAAC"}
@@ -1,6 +0,0 @@
1
- export interface LicenseAccessResult {
2
- dataMartAccess: 'full' | 'pm-scoped' | 'none';
3
- pmScopeUserId?: number;
4
- }
5
- export declare function resolveLicenseAccess(licenseTypeIds: number[], userId: number): LicenseAccessResult;
6
- //# sourceMappingURL=license-resolver.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license-resolver.d.ts","sourceRoot":"","sources":["../../../src/auth/license-resolver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,mBAAmB,CAQlG"}
@@ -1,12 +0,0 @@
1
- const FULL_ACCESS_TYPES = new Set([0, 1]);
2
- const PM_TYPE = 2;
3
- export function resolveLicenseAccess(licenseTypeIds, userId) {
4
- if (licenseTypeIds.some(id => FULL_ACCESS_TYPES.has(id))) {
5
- return { dataMartAccess: 'full' };
6
- }
7
- if (licenseTypeIds.includes(PM_TYPE)) {
8
- return { dataMartAccess: 'pm-scoped', pmScopeUserId: userId };
9
- }
10
- return { dataMartAccess: 'none' };
11
- }
12
- //# sourceMappingURL=license-resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"license-resolver.js","sourceRoot":"","sources":["../../../src/auth/license-resolver.ts"],"names":[],"mappings":"AAKA,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1C,MAAM,OAAO,GAAG,CAAC,CAAC;AAElB,MAAM,UAAU,oBAAoB,CAAC,cAAwB,EAAE,MAAc;IAC3E,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QACzD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;IACpC,CAAC;IACD,IAAI,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,CAAC;AACpC,CAAC"}
@@ -1,22 +0,0 @@
1
- import type { Logger } from 'pino';
2
- import type { EffectiveUserContext } from './effective-user-context.js';
3
- export interface TokenExchangeResult {
4
- sessionToken: string;
5
- userId: number;
6
- accountId: number;
7
- company: string;
8
- email: string;
9
- languageId: number;
10
- licenseTypeIds: number[];
11
- dataMartAccess: 'full' | 'pm-scoped' | 'none';
12
- pmScopeUserId?: number;
13
- expiresAt: string;
14
- scope: string;
15
- }
16
- export interface OAuthConfig {
17
- tokenExchangeUrl: string;
18
- audience: string;
19
- }
20
- export declare function exchangeToken(oauthToken: string, config: OAuthConfig, log?: Logger): Promise<TokenExchangeResult>;
21
- export declare function buildEffectiveUserContextFromExchange(result: TokenExchangeResult): EffectiveUserContext;
22
- //# sourceMappingURL=oauth-auth.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-auth.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth-auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAExE,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,GAAG,WAAW,GAAG,MAAM,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,WAAW,EACnB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,mBAAmB,CAAC,CAoB9B;AAED,wBAAgB,qCAAqC,CAAC,MAAM,EAAE,mBAAmB,GAAG,oBAAoB,CAcvG"}
@@ -1,34 +0,0 @@
1
- export async function exchangeToken(oauthToken, config, log) {
2
- log?.debug({ url: config.tokenExchangeUrl }, 'Token exchange request');
3
- const response = await fetch(config.tokenExchangeUrl, {
4
- method: 'POST',
5
- headers: {
6
- 'Content-Type': 'application/json',
7
- 'Authorization': `Bearer ${oauthToken}`,
8
- },
9
- body: JSON.stringify({ audience: config.audience }),
10
- });
11
- if (!response.ok) {
12
- log?.error({ status: response.status }, 'Token exchange failed');
13
- throw new Error(`Token exchange failed: ${response.status} ${response.statusText}`);
14
- }
15
- const result = await response.json();
16
- log?.info({ userId: result.userId, company: result.company }, 'Token exchange succeeded');
17
- return result;
18
- }
19
- export function buildEffectiveUserContextFromExchange(result) {
20
- return {
21
- source: 'token',
22
- company: result.company,
23
- accountId: result.accountId,
24
- userId: result.userId,
25
- languageId: result.languageId,
26
- email: result.email,
27
- licenseTypeIds: result.licenseTypeIds,
28
- dataMartAccess: result.dataMartAccess,
29
- pmScopeUserId: result.pmScopeUserId,
30
- grantedScopes: result.scope.split(' ').filter(Boolean),
31
- authHeaders: { 'Token': result.sessionToken },
32
- };
33
- }
34
- //# sourceMappingURL=oauth-auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-auth.js","sourceRoot":"","sources":["../../../src/auth/oauth-auth.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAAkB,EAClB,MAAmB,EACnB,GAAY;IAEZ,GAAG,EAAE,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,gBAAgB,EAAE,EAAE,wBAAwB,CAAC,CAAC;IAEvE,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,gBAAgB,EAAE;QACpD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,eAAe,EAAE,UAAU,UAAU,EAAE;SACxC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC;KACpD,CAAC,CAAC;IAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC;QACjE,MAAM,IAAI,KAAK,CAAC,0BAA0B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAyB,CAAC;IAC5D,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,EAAE,0BAA0B,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qCAAqC,CAAC,MAA2B;IAC/E,OAAO;QACL,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,aAAa,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACtD,WAAW,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE;KAC9C,CAAC;AACJ,CAAC"}
@@ -1,10 +0,0 @@
1
- export interface ProtectedResourceMetadata {
2
- resource: string;
3
- authorization_servers: string[];
4
- scopes_supported: string[];
5
- }
6
- export declare function buildProtectedResourceMetadata(config: {
7
- mcpServerUrl: string;
8
- authorizationServerUrl: string;
9
- }): ProtectedResourceMetadata;
10
- //# sourceMappingURL=oauth-metadata.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-metadata.d.ts","sourceRoot":"","sources":["../../../src/auth/oauth-metadata.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,yBAAyB;IACxC,QAAQ,EAAE,MAAM,CAAC;IACjB,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,wBAAgB,8BAA8B,CAAC,MAAM,EAAE;IACrD,YAAY,EAAE,MAAM,CAAC;IACrB,sBAAsB,EAAE,MAAM,CAAC;CAChC,GAAG,yBAAyB,CAM5B"}
@@ -1,8 +0,0 @@
1
- export function buildProtectedResourceMetadata(config) {
2
- return {
3
- resource: config.mcpServerUrl,
4
- authorization_servers: [config.authorizationServerUrl],
5
- scopes_supported: ['mcp:read', 'mcp:write'],
6
- };
7
- }
8
- //# sourceMappingURL=oauth-metadata.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-metadata.js","sourceRoot":"","sources":["../../../src/auth/oauth-metadata.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,8BAA8B,CAAC,MAG9C;IACC,OAAO;QACL,QAAQ,EAAE,MAAM,CAAC,YAAY;QAC7B,qBAAqB,EAAE,CAAC,MAAM,CAAC,sBAAsB,CAAC;QACtD,gBAAgB,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC;KAC5C,CAAC;AACJ,CAAC"}
@@ -1,2 +0,0 @@
1
- export declare function extractBearerToken(headers: Record<string, string | undefined>): string | undefined;
2
- //# sourceMappingURL=token-extraction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-extraction.d.ts","sourceRoot":"","sources":["../../../src/auth/token-extraction.ts"],"names":[],"mappings":"AAAA,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,GAAG,SAAS,CAIlG"}
@@ -1,7 +0,0 @@
1
- export function extractBearerToken(headers) {
2
- const auth = headers.authorization;
3
- if (auth?.startsWith('Bearer '))
4
- return auth.slice(7);
5
- return undefined;
6
- }
7
- //# sourceMappingURL=token-extraction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-extraction.js","sourceRoot":"","sources":["../../../src/auth/token-extraction.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB,CAAC,OAA2C;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC;IACnC,IAAI,IAAI,EAAE,UAAU,CAAC,SAAS,CAAC;QAAE,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACtD,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -1,25 +0,0 @@
1
- import type { Logger } from 'pino';
2
- export interface AuditClientConfig {
3
- apiUrl: string;
4
- company: string;
5
- authHeaders: Record<string, string>;
6
- log?: Logger;
7
- }
8
- export interface AuditEntry {
9
- timestamp: string;
10
- userId: number;
11
- accountId: number;
12
- toolName: string;
13
- parametersHash: string;
14
- success: boolean;
15
- error?: string;
16
- aiClientId: string;
17
- durationMs: number;
18
- }
19
- export interface AuditClient {
20
- log(entry: AuditEntry): Promise<void>;
21
- }
22
- export declare function hashParameters(params: unknown): string;
23
- export declare function createAuditClient(config: AuditClientConfig): AuditClient;
24
- export declare function createNoOpAuditClient(): AuditClient;
25
- //# sourceMappingURL=audit-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-client.d.ts","sourceRoot":"","sources":["../../../src/clients/audit-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,iBAAiB;IAChC,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,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAEtD;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,WAAW,CA0BxE;AAED,wBAAgB,qBAAqB,IAAI,WAAW,CAInD"}
@@ -1,37 +0,0 @@
1
- import { createHash } from 'node:crypto';
2
- export function hashParameters(params) {
3
- return createHash('sha256').update(JSON.stringify(params)).digest('hex');
4
- }
5
- export function createAuditClient(config) {
6
- const url = `${config.apiUrl}/v2/${config.company}/mcp/audit`;
7
- const headers = {
8
- ...config.authHeaders,
9
- 'Content-Type': 'application/json',
10
- };
11
- const log = config.log;
12
- return {
13
- async log(entry) {
14
- try {
15
- const response = await fetch(url, {
16
- method: 'POST',
17
- headers,
18
- body: JSON.stringify(entry),
19
- });
20
- if (!response.ok) {
21
- log?.warn({ status: response.status, toolName: entry.toolName }, 'Audit POST failed');
22
- return;
23
- }
24
- log?.debug({ toolName: entry.toolName }, 'Audit entry logged');
25
- }
26
- catch (err) {
27
- log?.warn({ err, toolName: entry.toolName }, 'Audit POST error');
28
- }
29
- },
30
- };
31
- }
32
- export function createNoOpAuditClient() {
33
- return {
34
- async log() { },
35
- };
36
- }
37
- //# sourceMappingURL=audit-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"audit-client.js","sourceRoot":"","sources":["../../../src/clients/audit-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA0BzC,MAAM,UAAU,cAAc,CAAC,MAAe;IAC5C,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAyB;IACzD,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,OAAO,YAAY,CAAC;IAC9D,MAAM,OAAO,GAA2B;QACtC,GAAG,MAAM,CAAC,WAAW;QACrB,cAAc,EAAE,kBAAkB;KACnC,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,KAAiB;YACzB,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAChC,MAAM,EAAE,MAAM;oBACd,OAAO;oBACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;iBAC5B,CAAC,CAAC;gBACH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,mBAAmB,CAAC,CAAC;oBACtF,OAAO;gBACT,CAAC;gBACD,GAAG,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,oBAAoB,CAAC,CAAC;YACjE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,GAAG,EAAE,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,kBAAkB,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,OAAO;QACL,KAAK,CAAC,GAAG,KAAmB,CAAC;KAC9B,CAAC;AACJ,CAAC"}
@@ -1,16 +0,0 @@
1
- import type { Logger } from 'pino';
2
- export interface DataMartClientConfig {
3
- apiUrl: string;
4
- company: string;
5
- authHeaders: Record<string, string>;
6
- log?: Logger;
7
- }
8
- export interface DataMartQuery {
9
- query: string;
10
- variables: Record<string, unknown>;
11
- }
12
- export interface DataMartClient {
13
- query(body: DataMartQuery): Promise<Record<string, unknown>>;
14
- }
15
- export declare function createDataMartClient(config: DataMartClientConfig): DataMartClient;
16
- //# sourceMappingURL=datamart-client.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"datamart-client.d.ts","sourceRoot":"","sources":["../../../src/clients/datamart-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,MAAM,WAAW,oBAAoB;IACnC,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,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,IAAI,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC9D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc,CAmCjF"}
@@ -1,32 +0,0 @@
1
- import { randomUUID } from 'node:crypto';
2
- export function createDataMartClient(config) {
3
- const baseUrl = `${config.apiUrl}/v2/${config.company}/datamart/graphql`;
4
- const log = config.log;
5
- return {
6
- async query(body) {
7
- const requestId = randomUUID();
8
- const start = Date.now();
9
- const response = await fetch(baseUrl, {
10
- method: 'POST',
11
- headers: {
12
- ...config.authHeaders,
13
- 'Content-Type': 'application/json',
14
- 'X-Request-Id': requestId,
15
- },
16
- body: JSON.stringify(body),
17
- });
18
- if (!response.ok) {
19
- log?.error({ requestId, status: response.status, ms: Date.now() - start }, 'DataMart request failed');
20
- throw new Error(`DataMart request failed: ${response.status} ${response.statusText}`);
21
- }
22
- const json = await response.json();
23
- if (json.errors?.length) {
24
- log?.error({ requestId, graphqlError: json.errors[0].message, ms: Date.now() - start }, 'DataMart GraphQL error');
25
- throw new Error(`DataMart GraphQL error: ${json.errors[0].message}`);
26
- }
27
- log?.debug({ requestId, ms: Date.now() - start }, 'DataMart request OK');
28
- return json.data ?? {};
29
- },
30
- };
31
- }
32
- //# sourceMappingURL=datamart-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"datamart-client.js","sourceRoot":"","sources":["../../../src/clients/datamart-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAmBzC,MAAM,UAAU,oBAAoB,CAAC,MAA4B;IAC/D,MAAM,OAAO,GAAG,GAAG,MAAM,CAAC,MAAM,OAAO,MAAM,CAAC,OAAO,mBAAmB,CAAC;IACzE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IAEvB,OAAO;QACL,KAAK,CAAC,KAAK,CAAC,IAAmB;YAC7B,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,EAAE;gBACpC,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,GAAG,MAAM,CAAC,WAAW;oBACrB,cAAc,EAAE,kBAAkB;oBAClC,cAAc,EAAE,SAAS;iBAC1B;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aAC3B,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,yBAAyB,CAAC,CAAC;gBACtG,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACxF,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA6E,CAAC;YAE9G,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBACxB,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,wBAAwB,CAAC,CAAC;gBAClH,MAAM,IAAI,KAAK,CAAC,2BAA2B,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YACvE,CAAC;YAED,GAAG,EAAE,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACzB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,18 +0,0 @@
1
- import type { Logger } from 'pino';
2
- import { type DataMartClient } from './datamart-client.js';
3
- import { type RestClient } from './rest-client.js';
4
- import { type AuditClient } from './audit-client.js';
5
- export interface ClientConfig {
6
- apiUrl: string;
7
- company: string;
8
- authHeaders: Record<string, string>;
9
- log?: Logger;
10
- }
11
- export interface Clients {
12
- datamart: DataMartClient;
13
- rest: RestClient;
14
- audit: AuditClient;
15
- }
16
- export declare function createClients(config: ClientConfig, audit?: AuditClient): Clients;
17
- export type { DataMartClient, RestClient, AuditClient };
18
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/clients/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,EAAwB,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAyB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAE5E,MAAM,WAAW,YAAY;IAC3B,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,OAAO;IACtB,QAAQ,EAAE,cAAc,CAAC;IACzB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,CAAC,EAAE,WAAW,GAAG,OAAO,CAMhF;AAED,YAAY,EAAE,cAAc,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC"}