@itm-platform/mcp-server 1.0.0 → 1.0.2

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 (122) hide show
  1. package/README.md +173 -141
  2. package/package.json +2 -2
  3. package/dist/src/auth/api-key-auth.d.ts +0 -3
  4. package/dist/src/auth/api-key-auth.d.ts.map +0 -1
  5. package/dist/src/auth/api-key-auth.js +0 -53
  6. package/dist/src/auth/api-key-auth.js.map +0 -1
  7. package/dist/src/auth/effective-user-context.d.ts +0 -16
  8. package/dist/src/auth/effective-user-context.d.ts.map +0 -1
  9. package/dist/src/auth/effective-user-context.js +0 -9
  10. package/dist/src/auth/effective-user-context.js.map +0 -1
  11. package/dist/src/auth/license-resolver.d.ts +0 -6
  12. package/dist/src/auth/license-resolver.d.ts.map +0 -1
  13. package/dist/src/auth/license-resolver.js +0 -12
  14. package/dist/src/auth/license-resolver.js.map +0 -1
  15. package/dist/src/auth/oauth-auth.d.ts +0 -22
  16. package/dist/src/auth/oauth-auth.d.ts.map +0 -1
  17. package/dist/src/auth/oauth-auth.js +0 -34
  18. package/dist/src/auth/oauth-auth.js.map +0 -1
  19. package/dist/src/auth/oauth-metadata.d.ts +0 -10
  20. package/dist/src/auth/oauth-metadata.d.ts.map +0 -1
  21. package/dist/src/auth/oauth-metadata.js +0 -8
  22. package/dist/src/auth/oauth-metadata.js.map +0 -1
  23. package/dist/src/auth/token-extraction.d.ts +0 -2
  24. package/dist/src/auth/token-extraction.d.ts.map +0 -1
  25. package/dist/src/auth/token-extraction.js +0 -7
  26. package/dist/src/auth/token-extraction.js.map +0 -1
  27. package/dist/src/clients/audit-client.d.ts +0 -25
  28. package/dist/src/clients/audit-client.d.ts.map +0 -1
  29. package/dist/src/clients/audit-client.js +0 -37
  30. package/dist/src/clients/audit-client.js.map +0 -1
  31. package/dist/src/clients/datamart-client.d.ts +0 -16
  32. package/dist/src/clients/datamart-client.d.ts.map +0 -1
  33. package/dist/src/clients/datamart-client.js +0 -32
  34. package/dist/src/clients/datamart-client.js.map +0 -1
  35. package/dist/src/clients/index.d.ts +0 -18
  36. package/dist/src/clients/index.d.ts.map +0 -1
  37. package/dist/src/clients/index.js +0 -11
  38. package/dist/src/clients/index.js.map +0 -1
  39. package/dist/src/clients/rest-client.d.ts +0 -14
  40. package/dist/src/clients/rest-client.d.ts.map +0 -1
  41. package/dist/src/clients/rest-client.js +0 -29
  42. package/dist/src/clients/rest-client.js.map +0 -1
  43. package/dist/src/logger.d.ts +0 -3
  44. package/dist/src/logger.d.ts.map +0 -1
  45. package/dist/src/logger.js +0 -37
  46. package/dist/src/logger.js.map +0 -1
  47. package/dist/src/prompts/portfolio-overview.d.ts +0 -3
  48. package/dist/src/prompts/portfolio-overview.d.ts.map +0 -1
  49. package/dist/src/prompts/portfolio-overview.js +0 -21
  50. package/dist/src/prompts/portfolio-overview.js.map +0 -1
  51. package/dist/src/prompts/project-status.d.ts +0 -3
  52. package/dist/src/prompts/project-status.d.ts.map +0 -1
  53. package/dist/src/prompts/project-status.js +0 -24
  54. package/dist/src/prompts/project-status.js.map +0 -1
  55. package/dist/src/prompts/risk-analysis.d.ts +0 -3
  56. package/dist/src/prompts/risk-analysis.d.ts.map +0 -1
  57. package/dist/src/prompts/risk-analysis.js +0 -23
  58. package/dist/src/prompts/risk-analysis.js.map +0 -1
  59. package/dist/src/prompts/team-workload.d.ts +0 -3
  60. package/dist/src/prompts/team-workload.d.ts.map +0 -1
  61. package/dist/src/prompts/team-workload.js +0 -29
  62. package/dist/src/prompts/team-workload.js.map +0 -1
  63. package/dist/src/resources/calendars.d.ts +0 -4
  64. package/dist/src/resources/calendars.d.ts.map +0 -1
  65. package/dist/src/resources/calendars.js +0 -18
  66. package/dist/src/resources/calendars.js.map +0 -1
  67. package/dist/src/resources/schemas.d.ts +0 -4
  68. package/dist/src/resources/schemas.d.ts.map +0 -1
  69. package/dist/src/resources/schemas.js +0 -34
  70. package/dist/src/resources/schemas.js.map +0 -1
  71. package/dist/src/server.d.ts +0 -2
  72. package/dist/src/server.d.ts.map +0 -1
  73. package/dist/src/server.js +0 -213
  74. package/dist/src/server.js.map +0 -1
  75. package/dist/src/tools/datamart.d.ts +0 -17
  76. package/dist/src/tools/datamart.d.ts.map +0 -1
  77. package/dist/src/tools/datamart.js +0 -68
  78. package/dist/src/tools/datamart.js.map +0 -1
  79. package/dist/src/tools/financials.d.ts +0 -4
  80. package/dist/src/tools/financials.d.ts.map +0 -1
  81. package/dist/src/tools/financials.js +0 -50
  82. package/dist/src/tools/financials.js.map +0 -1
  83. package/dist/src/tools/graphql-queries.d.ts +0 -22
  84. package/dist/src/tools/graphql-queries.d.ts.map +0 -1
  85. package/dist/src/tools/graphql-queries.js +0 -26
  86. package/dist/src/tools/graphql-queries.js.map +0 -1
  87. package/dist/src/tools/portfolio.d.ts +0 -10
  88. package/dist/src/tools/portfolio.d.ts.map +0 -1
  89. package/dist/src/tools/portfolio.js +0 -54
  90. package/dist/src/tools/portfolio.js.map +0 -1
  91. package/dist/src/tools/projects.d.ts +0 -42
  92. package/dist/src/tools/projects.d.ts.map +0 -1
  93. package/dist/src/tools/projects.js +0 -73
  94. package/dist/src/tools/projects.js.map +0 -1
  95. package/dist/src/tools/reference-data.d.ts +0 -4
  96. package/dist/src/tools/reference-data.d.ts.map +0 -1
  97. package/dist/src/tools/reference-data.js +0 -19
  98. package/dist/src/tools/reference-data.js.map +0 -1
  99. package/dist/src/tools/risks-issues.d.ts +0 -4
  100. package/dist/src/tools/risks-issues.d.ts.map +0 -1
  101. package/dist/src/tools/risks-issues.js +0 -33
  102. package/dist/src/tools/risks-issues.js.map +0 -1
  103. package/dist/src/tools/services.d.ts +0 -41
  104. package/dist/src/tools/services.d.ts.map +0 -1
  105. package/dist/src/tools/services.js +0 -67
  106. package/dist/src/tools/services.js.map +0 -1
  107. package/dist/src/tools/tasks.d.ts +0 -4
  108. package/dist/src/tools/tasks.d.ts.map +0 -1
  109. package/dist/src/tools/tasks.js +0 -17
  110. package/dist/src/tools/tasks.js.map +0 -1
  111. package/dist/src/tools/users.d.ts +0 -4
  112. package/dist/src/tools/users.d.ts.map +0 -1
  113. package/dist/src/tools/users.js +0 -30
  114. package/dist/src/tools/users.js.map +0 -1
  115. package/dist/src/tools/write-tools.d.ts +0 -75
  116. package/dist/src/tools/write-tools.d.ts.map +0 -1
  117. package/dist/src/tools/write-tools.js +0 -193
  118. package/dist/src/tools/write-tools.js.map +0 -1
  119. package/dist/src/validation/query-validator.d.ts +0 -15
  120. package/dist/src/validation/query-validator.d.ts.map +0 -1
  121. package/dist/src/validation/query-validator.js +0 -141
  122. package/dist/src/validation/query-validator.js.map +0 -1
@@ -1,73 +0,0 @@
1
- import { z } from 'zod';
2
- import { COMPONENTS_QUERY, COMPONENT_QUERY, DEFAULT_PROJECT_FIELDS, MAX_LIST_LIMIT, clampLimit } from './graphql-queries.js';
3
- export function buildSearchProjectsVariables(args) {
4
- const where = { componentType: { $eq: 'project' } };
5
- if (args.query)
6
- where.name = { $regex: args.query, $options: 'i' };
7
- if (args.status)
8
- where.statusLabel = { $regex: args.status, $options: 'i' };
9
- if (args.type)
10
- where.customTypeLabel = { $regex: args.type, $options: 'i' };
11
- if (args.dateFrom)
12
- where.startDate = { $gte: args.dateFrom };
13
- if (args.dateTo)
14
- where.endDate = { $lte: args.dateTo };
15
- return {
16
- w: where,
17
- proj: DEFAULT_PROJECT_FIELDS,
18
- sort: args.sort ? { [args.sort]: 1 } : { name: 1 },
19
- limit: clampLimit(args.limit, MAX_LIST_LIMIT),
20
- skip: args.skip ?? 0,
21
- };
22
- }
23
- const INCLUDE_MAP = {
24
- tasks: { tasks: 1 },
25
- risks: { risks: 1 },
26
- issues: { issues: 1 },
27
- purchases: { purchases: 1 },
28
- revenues: { revenues: 1 },
29
- budget: { budgetTopDown: 1, budgetBottomUp: 1, budgetPeriodEndClose: 1, budgetActual: 1 },
30
- };
31
- export function buildGetProjectProjection(include) {
32
- const proj = { ...DEFAULT_PROJECT_FIELDS };
33
- for (const inc of include) {
34
- const fields = INCLUDE_MAP[inc];
35
- if (fields)
36
- Object.assign(proj, fields);
37
- }
38
- return proj;
39
- }
40
- export function registerProjectTools(server, clients) {
41
- server.registerTool('search_projects', {
42
- description: 'Find projects by name, status, type, or date range. Returns id, name, status, progress, dates, managers. Filterable fields: name, statusLabel, customTypeLabel, startDate, endDate.',
43
- inputSchema: {
44
- query: z.string().optional().describe('Search projects by name (case-insensitive regex)'),
45
- status: z.string().optional().describe('Filter by status label (e.g. "In Progress", "Closed")'),
46
- type: z.string().optional().describe('Filter by project type label'),
47
- dateFrom: z.string().optional().describe('Filter projects starting on or after this date (ISO 8601)'),
48
- dateTo: z.string().optional().describe('Filter projects ending on or before this date (ISO 8601)'),
49
- sort: z.string().optional().describe('Sort field (default: "name"). Use DataMart field names.'),
50
- limit: z.number().optional().describe('Max results (default 50, max 200)'),
51
- skip: z.number().optional().describe('Offset for pagination'),
52
- },
53
- }, async (args) => {
54
- const variables = buildSearchProjectsVariables(args);
55
- const data = await clients.datamart.query({ query: COMPONENTS_QUERY, variables });
56
- return { content: [{ type: 'text', text: JSON.stringify(data.components, null, 2) }] };
57
- });
58
- server.registerTool('get_project', {
59
- description: 'Get full project details by ID, optionally including subcomponents (tasks, risks, issues, budget, purchases, revenues). One query returns everything requested.',
60
- inputSchema: {
61
- projectId: z.number().describe('The project ID'),
62
- include: z.array(z.enum(['tasks', 'risks', 'issues', 'budget', 'purchases', 'revenues']))
63
- .optional()
64
- .describe('Subcomponents to include (default: none)'),
65
- },
66
- }, async (args) => {
67
- const proj = buildGetProjectProjection(args.include ?? []);
68
- const variables = { id: args.projectId, proj };
69
- const data = await clients.datamart.query({ query: COMPONENT_QUERY, variables });
70
- return { content: [{ type: 'text', text: JSON.stringify(data.component, null, 2) }] };
71
- });
72
- }
73
- //# sourceMappingURL=projects.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/tools/projects.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { Clients } from '../clients/index.js';
3
- export declare function registerReferenceDataTools(server: McpServer, clients: Clients): void;
4
- //# sourceMappingURL=reference-data.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reference-data.d.ts","sourceRoot":"","sources":["../../../src/tools/reference-data.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AASnD,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,QAc7E"}
@@ -1,19 +0,0 @@
1
- import { z } from 'zod';
2
- const ALLOWED_ENTITIES = [
3
- 'projectstatuses', 'gettaskstatuses', 'gettasktypes', 'gettaskpriorities',
4
- 'getprojecttypes', 'projectpriorities', 'riskstatuses', 'risktypes',
5
- 'issuestatuses', 'issuetypes', 'purchasestatuses', 'purchasetypes',
6
- 'revenuestatuses',
7
- ];
8
- export function registerReferenceDataTools(server, clients) {
9
- server.registerTool('get_reference_data', {
10
- description: 'Get reference data lists (statuses, types, priorities) for any entity. Useful for understanding valid values when filtering or interpreting data. Available entities: projectstatuses, gettaskstatuses, gettasktypes, gettaskpriorities, getprojecttypes, projectpriorities, riskstatuses, risktypes, issuestatuses, issuetypes, purchasestatuses, purchasetypes, revenuestatuses.',
11
- inputSchema: {
12
- entity: z.enum(ALLOWED_ENTITIES).describe('The reference data entity to retrieve'),
13
- },
14
- }, async (args) => {
15
- const data = await clients.rest.get(args.entity);
16
- return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
17
- });
18
- }
19
- //# sourceMappingURL=reference-data.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reference-data.js","sourceRoot":"","sources":["../../../src/tools/reference-data.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,gBAAgB,GAAG;IACvB,iBAAiB,EAAE,iBAAiB,EAAE,cAAc,EAAE,mBAAmB;IACzE,iBAAiB,EAAE,mBAAmB,EAAE,cAAc,EAAE,WAAW;IACnE,eAAe,EAAE,YAAY,EAAE,kBAAkB,EAAE,eAAe;IAClE,iBAAiB;CACT,CAAC;AAEX,MAAM,UAAU,0BAA0B,CAAC,MAAiB,EAAE,OAAgB;IAC5E,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,oXAAoX;QACjY,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SACnF;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,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"}
@@ -1,4 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { Clients } from '../clients/index.js';
3
- export declare function registerRisksIssuesTools(server: McpServer, clients: Clients): void;
4
- //# sourceMappingURL=risks-issues.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"risks-issues.d.ts","sourceRoot":"","sources":["../../../src/tools/risks-issues.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,QAsC3E"}
@@ -1,33 +0,0 @@
1
- import { z } from 'zod';
2
- import { COMPONENT_QUERY } from './graphql-queries.js';
3
- export function registerRisksIssuesTools(server, clients) {
4
- server.registerTool('get_project_risks', {
5
- description: 'Get risks for a project. Returns an array of risk items with name, description, status, probability, impact, and mitigation plan.',
6
- inputSchema: {
7
- projectId: z.number().describe('The project ID'),
8
- },
9
- }, async (args) => {
10
- const data = await clients.datamart.query({
11
- query: COMPONENT_QUERY,
12
- variables: { id: args.projectId, proj: { risks: 1 } },
13
- });
14
- const component = data.component;
15
- const risks = component?.risks ?? [];
16
- return { content: [{ type: 'text', text: JSON.stringify(risks, null, 2) }] };
17
- });
18
- server.registerTool('get_project_issues', {
19
- description: 'Get issues for a project. Returns an array of issue items with name, description, status, severity, and resolution.',
20
- inputSchema: {
21
- projectId: z.number().describe('The project ID'),
22
- },
23
- }, async (args) => {
24
- const data = await clients.datamart.query({
25
- query: COMPONENT_QUERY,
26
- variables: { id: args.projectId, proj: { issues: 1 } },
27
- });
28
- const component = data.component;
29
- const issues = component?.issues ?? [];
30
- return { content: [{ type: 'text', text: JSON.stringify(issues, null, 2) }] };
31
- });
32
- }
33
- //# sourceMappingURL=risks-issues.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"risks-issues.js","sourceRoot":"","sources":["../../../src/tools/risks-issues.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEvD,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,OAAgB;IAC1E,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;QACE,WAAW,EAAE,mIAAmI;QAChJ,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACjD;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxC,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;SACtD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,SAA2C,CAAC;QACnE,MAAM,KAAK,GAAG,SAAS,EAAE,KAAK,IAAI,EAAE,CAAC;QACrC,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;IAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;QACE,WAAW,EAAE,qHAAqH;QAClI,WAAW,EAAE;YACX,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;SACjD;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YACxC,KAAK,EAAE,eAAe;YACtB,SAAS,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE;SACvD,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,SAA2C,CAAC;QACnE,MAAM,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IACzF,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -1,41 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { Clients } from '../clients/index.js';
3
- interface SearchServicesArgs {
4
- query?: string;
5
- status?: string;
6
- type?: string;
7
- dateFrom?: string;
8
- dateTo?: string;
9
- sort?: string;
10
- limit?: number;
11
- skip?: number;
12
- }
13
- export declare function buildSearchServicesVariables(args: SearchServicesArgs): {
14
- w: Record<string, unknown>;
15
- proj: {
16
- id: number;
17
- name: number;
18
- code: number;
19
- componentType: number;
20
- statusLabel: number;
21
- priorityLabel: number;
22
- percentComplete: number;
23
- startDate: number;
24
- endDate: number;
25
- 'managers.name': number;
26
- 'managers.userId': number;
27
- methodology: number;
28
- customTypeLabel: number;
29
- };
30
- sort: {
31
- [args.sort]: number;
32
- name?: undefined;
33
- } | {
34
- name: number;
35
- };
36
- limit: number;
37
- skip: number;
38
- };
39
- export declare function registerServiceTools(server: McpServer, clients: Clients): void;
40
- export {};
41
- //# sourceMappingURL=services.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services.d.ts","sourceRoot":"","sources":["../../../src/tools/services.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,UAAU,kBAAkB;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;;;;;;;;;QAY7C,CAAC,IAAI,CAAC,IAAI,CAAC,SAAG;;;;;;;EAIrC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,QAmDvE"}
@@ -1,67 +0,0 @@
1
- import { z } from 'zod';
2
- import { COMPONENTS_QUERY, COMPONENT_QUERY, DEFAULT_PROJECT_FIELDS, MAX_LIST_LIMIT, clampLimit } from './graphql-queries.js';
3
- export function buildSearchServicesVariables(args) {
4
- const where = { componentType: { $eq: 'service' } };
5
- if (args.query)
6
- where.name = { $regex: args.query, $options: 'i' };
7
- if (args.status)
8
- where.statusLabel = { $regex: args.status, $options: 'i' };
9
- if (args.type)
10
- where.customTypeLabel = { $regex: args.type, $options: 'i' };
11
- if (args.dateFrom)
12
- where.startDate = { $gte: args.dateFrom };
13
- if (args.dateTo)
14
- where.endDate = { $lte: args.dateTo };
15
- return {
16
- w: where,
17
- proj: DEFAULT_PROJECT_FIELDS,
18
- sort: args.sort ? { [args.sort]: 1 } : { name: 1 },
19
- limit: clampLimit(args.limit, MAX_LIST_LIMIT),
20
- skip: args.skip ?? 0,
21
- };
22
- }
23
- export function registerServiceTools(server, clients) {
24
- server.registerTool('search_services', {
25
- description: 'Find services by name, status, type, or date range. Same query shape as search_projects but for services.',
26
- inputSchema: {
27
- query: z.string().optional().describe('Search services by name (case-insensitive regex)'),
28
- status: z.string().optional().describe('Filter by status label'),
29
- type: z.string().optional().describe('Filter by service type label'),
30
- dateFrom: z.string().optional().describe('Filter services starting on or after this date (ISO 8601)'),
31
- dateTo: z.string().optional().describe('Filter services ending on or before this date (ISO 8601)'),
32
- sort: z.string().optional().describe('Sort field (default: "name")'),
33
- limit: z.number().optional().describe('Max results (default 50, max 200)'),
34
- skip: z.number().optional().describe('Offset for pagination'),
35
- },
36
- }, async (args) => {
37
- const variables = buildSearchServicesVariables(args);
38
- const data = await clients.datamart.query({ query: COMPONENTS_QUERY, variables });
39
- return { content: [{ type: 'text', text: JSON.stringify(data.components, null, 2) }] };
40
- });
41
- server.registerTool('get_service', {
42
- description: 'Get full service details by ID, optionally including subcomponents (activities, purchases, revenues). Note: services have activities instead of tasks, and do not have risks or issues.',
43
- inputSchema: {
44
- serviceId: z.number().describe('The service ID'),
45
- include: z.array(z.enum(['activities', 'purchases', 'revenues', 'budget']))
46
- .optional()
47
- .describe('Subcomponents to include (default: none)'),
48
- },
49
- }, async (args) => {
50
- const proj = { ...DEFAULT_PROJECT_FIELDS };
51
- const includeMap = {
52
- activities: { activities: 1 },
53
- purchases: { purchases: 1 },
54
- revenues: { revenues: 1 },
55
- budget: { budgetTopDown: 1, budgetBottomUp: 1, budgetPeriodEndClose: 1, budgetActual: 1 },
56
- };
57
- for (const inc of args.include ?? []) {
58
- const fields = includeMap[inc];
59
- if (fields)
60
- Object.assign(proj, fields);
61
- }
62
- const variables = { id: args.serviceId, proj };
63
- const data = await clients.datamart.query({ query: COMPONENT_QUERY, variables });
64
- return { content: [{ type: 'text', text: JSON.stringify(data.component, null, 2) }] };
65
- });
66
- }
67
- //# sourceMappingURL=services.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"services.js","sourceRoot":"","sources":["../../../src/tools/services.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { Clients } from '../clients/index.js';
3
- export declare function registerTaskTools(server: McpServer, clients: Clients): void;
4
- //# sourceMappingURL=tasks.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../../src/tools/tasks.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,QAiBpE"}
@@ -1,17 +0,0 @@
1
- import { z } from 'zod';
2
- import { COMPONENT_QUERY } from './graphql-queries.js';
3
- export function registerTaskTools(server, clients) {
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.',
6
- inputSchema: {
7
- projectId: z.number().describe('The project ID'),
8
- },
9
- }, 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) }] };
15
- });
16
- }
17
- //# sourceMappingURL=tasks.js.map
@@ -1 +0,0 @@
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,4 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { Clients } from '../clients/index.js';
3
- export declare function registerUserTools(server: McpServer, clients: Clients): void;
4
- //# sourceMappingURL=users.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/tools/users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,QAoCpE"}
@@ -1,30 +0,0 @@
1
- import { z } from 'zod';
2
- export function registerUserTools(server, clients) {
3
- server.registerTool('search_users', {
4
- description: 'Find team members by name or email. Returns userId, name, email, role. Uses v2 REST API (not DataMart).',
5
- inputSchema: {
6
- query: z.string().optional().describe('Search by name or email (case-insensitive)'),
7
- limit: z.number().optional().describe('Max results (default 50)'),
8
- },
9
- }, async (args) => {
10
- const body = {
11
- page: 1,
12
- pageSize: Math.min(args.limit ?? 50, 200),
13
- };
14
- if (args.query) {
15
- body.Filter = { Name: { $regex: args.query } };
16
- }
17
- const data = await clients.rest.post('AllUsers', body);
18
- return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
19
- });
20
- server.registerTool('get_user', {
21
- description: 'Get details for a single user by ID. Returns full user profile including roles, categories, and contact info.',
22
- inputSchema: {
23
- userId: z.number().describe('The user ID'),
24
- },
25
- }, async (args) => {
26
- const data = await clients.rest.get(`users/${args.userId}`);
27
- return { content: [{ type: 'text', text: JSON.stringify(data, null, 2) }] };
28
- });
29
- }
30
- //# sourceMappingURL=users.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/tools/users.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,iBAAiB,CAAC,MAAiB,EAAE,OAAgB;IACnE,MAAM,CAAC,YAAY,CACjB,cAAc,EACd;QACE,WAAW,EAAE,yGAAyG;QACtH,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACnF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;SAClE;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAA4B;YACpC,IAAI,EAAE,CAAC;YACP,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,GAAG,CAAC;SAC1C,CAAC;QACF,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACvD,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;IAEF,MAAM,CAAC,YAAY,CACjB,UAAU,EACV;QACE,WAAW,EAAE,+GAA+G;QAC5H,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;SAC3C;KACF,EACD,KAAK,EAAE,IAAI,EAAE,EAAE;QACb,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QAC5D,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"}
@@ -1,75 +0,0 @@
1
- import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
- import type { Logger } from 'pino';
3
- import type { Clients } from '../clients/index.js';
4
- import { type EffectiveUserContext } from '../auth/effective-user-context.js';
5
- export declare const STALE_AFTER_WRITE_NOTICE: string;
6
- export declare function buildInsufficientScopeResponse(): {
7
- content: Array<{
8
- type: 'text';
9
- text: string;
10
- }>;
11
- isError: true;
12
- };
13
- export declare function buildWriteResponse(data: unknown): {
14
- content: Array<{
15
- type: 'text';
16
- text: string;
17
- }>;
18
- };
19
- export declare function auditWrap(clients: Clients, toolName: string, args: Record<string, unknown>, userContext: {
20
- userId: number;
21
- accountId: number;
22
- aiClientId: string;
23
- }, operation: () => Promise<unknown>): Promise<unknown>;
24
- export declare function splitCreateTaskArgs(args: {
25
- projectId: number;
26
- [key: string]: unknown;
27
- }): {
28
- path: string;
29
- body: {
30
- [key: string]: unknown;
31
- };
32
- };
33
- export declare function splitUpdateTaskArgs(args: {
34
- projectId: number;
35
- taskId: number;
36
- [key: string]: unknown;
37
- }): {
38
- path: string;
39
- body: {
40
- [key: string]: unknown;
41
- };
42
- };
43
- export declare function splitCreateRiskArgs(args: {
44
- projectId: number;
45
- [key: string]: unknown;
46
- }): {
47
- path: string;
48
- body: {
49
- [key: string]: unknown;
50
- };
51
- };
52
- export declare function splitCreateIssueArgs(args: {
53
- projectId: number;
54
- [key: string]: unknown;
55
- }): {
56
- path: string;
57
- body: {
58
- [key: string]: unknown;
59
- };
60
- };
61
- export declare function splitUpdateProjectArgs(args: {
62
- projectId: number;
63
- [key: string]: unknown;
64
- }): {
65
- path: string;
66
- body: {
67
- [key: string]: unknown;
68
- };
69
- };
70
- export declare function registerWriteTools(server: McpServer, clients: Clients, userContext: {
71
- userId: number;
72
- accountId: number;
73
- aiClientId: string;
74
- }, log?: Logger, effectiveUserContext?: EffectiveUserContext): void;
75
- //# sourceMappingURL=write-tools.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"write-tools.d.ts","sourceRoot":"","sources":["../../../src/tools/write-tools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAY,KAAK,oBAAoB,EAAE,MAAM,mCAAmC,CAAC;AAExF,eAAO,MAAM,wBAAwB,QAGmC,CAAC;AAEzE,wBAAgB,8BAA8B,IAAI;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAKlH;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAOpG;AAED,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,WAAW,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EACtE,SAAS,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,GAChC,OAAO,CAAC,OAAO,CAAC,CAqClB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;;;;;EAGtF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;;;;;EAGtG;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;;;;;EAGtF;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;;;;;EAGvF;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE;;;;;EAGzF;AAED,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,EACtE,GAAG,CAAC,EAAE,MAAM,EACZ,oBAAoB,CAAC,EAAE,oBAAoB,GAC1C,IAAI,CA2IN"}