@structured-world/gitlab-mcp 4.1.0 → 4.2.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 (68) hide show
  1. package/README.md +44 -28
  2. package/dist/config.d.ts +0 -2
  3. package/dist/config.js +1 -3
  4. package/dist/config.js.map +1 -1
  5. package/dist/entities/core/registry.js +96 -24
  6. package/dist/entities/core/registry.js.map +1 -1
  7. package/dist/entities/core/schema-readonly.d.ts +3 -0
  8. package/dist/entities/core/schema-readonly.js +3 -0
  9. package/dist/entities/core/schema-readonly.js.map +1 -1
  10. package/dist/entities/core/schema.d.ts +3 -6
  11. package/dist/entities/core/schema.js +2 -6
  12. package/dist/entities/core/schema.js.map +1 -1
  13. package/dist/entities/labels/registry.js +18 -29
  14. package/dist/entities/labels/registry.js.map +1 -1
  15. package/dist/entities/labels/schema-readonly.d.ts +8 -36
  16. package/dist/entities/labels/schema-readonly.js +5 -15
  17. package/dist/entities/labels/schema-readonly.js.map +1 -1
  18. package/dist/entities/labels/schema.d.ts +12 -59
  19. package/dist/entities/labels/schema.js +8 -23
  20. package/dist/entities/labels/schema.js.map +1 -1
  21. package/dist/entities/milestones/registry.js +35 -52
  22. package/dist/entities/milestones/registry.js.map +1 -1
  23. package/dist/entities/milestones/schema-readonly.d.ts +20 -99
  24. package/dist/entities/milestones/schema-readonly.js +6 -17
  25. package/dist/entities/milestones/schema-readonly.js.map +1 -1
  26. package/dist/entities/milestones/schema.d.ts +16 -76
  27. package/dist/entities/milestones/schema.js +8 -28
  28. package/dist/entities/milestones/schema.js.map +1 -1
  29. package/dist/entities/pipelines/schema-readonly.d.ts +4 -4
  30. package/dist/entities/variables/registry.js +18 -28
  31. package/dist/entities/variables/registry.js.map +1 -1
  32. package/dist/entities/variables/schema-readonly.d.ts +8 -38
  33. package/dist/entities/variables/schema-readonly.js +4 -13
  34. package/dist/entities/variables/schema-readonly.js.map +1 -1
  35. package/dist/entities/variables/schema.d.ts +12 -85
  36. package/dist/entities/variables/schema.js +6 -21
  37. package/dist/entities/variables/schema.js.map +1 -1
  38. package/dist/entities/wiki/registry.js +20 -37
  39. package/dist/entities/wiki/registry.js.map +1 -1
  40. package/dist/entities/wiki/schema-readonly.d.ts +8 -34
  41. package/dist/entities/wiki/schema-readonly.js +4 -13
  42. package/dist/entities/wiki/schema-readonly.js.map +1 -1
  43. package/dist/entities/wiki/schema.d.ts +12 -55
  44. package/dist/entities/wiki/schema.js +6 -21
  45. package/dist/entities/wiki/schema.js.map +1 -1
  46. package/dist/entities/workitems/registry.js +87 -20
  47. package/dist/entities/workitems/registry.js.map +1 -1
  48. package/dist/entities/workitems/schema-readonly.d.ts +7 -19
  49. package/dist/entities/workitems/schema-readonly.js +8 -12
  50. package/dist/entities/workitems/schema-readonly.js.map +1 -1
  51. package/dist/graphql/workItems.d.ts +23 -2
  52. package/dist/graphql/workItems.js +36 -36
  53. package/dist/graphql/workItems.js.map +1 -1
  54. package/dist/server.js +86 -13
  55. package/dist/server.js.map +1 -1
  56. package/dist/structured-world-gitlab-mcp-4.2.0.tgz +0 -0
  57. package/dist/tsconfig.build.tsbuildinfo +1 -1
  58. package/dist/types.d.ts +1 -0
  59. package/dist/types.js +1 -0
  60. package/dist/types.js.map +1 -1
  61. package/dist/utils/namespace.d.ts +6 -0
  62. package/dist/utils/namespace.js +52 -0
  63. package/dist/utils/namespace.js.map +1 -0
  64. package/dist/utils/smart-user-search.d.ts +33 -0
  65. package/dist/utils/smart-user-search.js +146 -0
  66. package/dist/utils/smart-user-search.js.map +1 -0
  67. package/package.json +2 -1
  68. package/dist/structured-world-gitlab-mcp-4.1.0.tgz +0 -0
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GET_WORK_ITEM_TYPES = exports.DELETE_WORK_ITEM = exports.UPDATE_WORK_ITEM = exports.CREATE_WORK_ITEM_WITH_DESCRIPTION = exports.CREATE_WORK_ITEM = exports.GET_WORK_ITEM = exports.GET_PROJECT_WORK_ITEMS = exports.GET_WORK_ITEMS = exports.WorkItemWidgetTypes = void 0;
3
+ exports.GET_WORK_ITEM_TYPES = exports.DELETE_WORK_ITEM = exports.UPDATE_WORK_ITEM = exports.CREATE_WORK_ITEM_WITH_DESCRIPTION = exports.CREATE_WORK_ITEM = exports.GET_WORK_ITEM = exports.GET_PROJECT_WORK_ITEMS = exports.GET_WORK_ITEMS = exports.GET_NAMESPACE_TYPE = exports.GET_GROUP_PROJECTS = exports.WorkItemWidgetTypes = void 0;
4
4
  const graphql_tag_1 = require("graphql-tag");
5
5
  exports.WorkItemWidgetTypes = {
6
6
  ASSIGNEES: 'ASSIGNEES',
@@ -33,6 +33,26 @@ exports.WorkItemWidgetTypes = {
33
33
  LINKED_RESOURCES: 'LINKED_RESOURCES',
34
34
  VULNERABILITIES: 'VULNERABILITIES',
35
35
  };
36
+ exports.GET_GROUP_PROJECTS = (0, graphql_tag_1.gql) `
37
+ query GetGroupProjects($groupPath: ID!, $includeSubgroups: Boolean) {
38
+ group(fullPath: $groupPath) {
39
+ projects(includeSubgroups: $includeSubgroups) {
40
+ nodes {
41
+ id
42
+ fullPath
43
+ }
44
+ }
45
+ }
46
+ }
47
+ `;
48
+ exports.GET_NAMESPACE_TYPE = (0, graphql_tag_1.gql) `
49
+ query GetNamespaceType($namespacePath: ID!) {
50
+ namespace(fullPath: $namespacePath) {
51
+ __typename
52
+ fullPath
53
+ }
54
+ }
55
+ `;
36
56
  exports.GET_WORK_ITEMS = (0, graphql_tag_1.gql) `
37
57
  query GetWorkItems($groupPath: ID!, $types: [IssueType!], $first: Int, $after: String) {
38
58
  group(fullPath: $groupPath) {
@@ -239,7 +259,6 @@ exports.GET_WORK_ITEMS = (0, graphql_tag_1.gql) `
239
259
  ... on WorkItemWidgetLinkedItems {
240
260
  linkedItems {
241
261
  nodes {
242
- linkId
243
262
  linkType
244
263
  workItem {
245
264
  id
@@ -467,12 +486,9 @@ exports.GET_PROJECT_WORK_ITEMS = (0, graphql_tag_1.gql) `
467
486
  startDate
468
487
  dueDate
469
488
  isFixed
470
- fixed
471
- inherited
472
489
  }
473
490
  ... on WorkItemWidgetHealthStatus {
474
491
  healthStatus
475
- allowsScopedLabels
476
492
  }
477
493
  ... on WorkItemWidgetWeight {
478
494
  weight
@@ -547,10 +563,7 @@ exports.GET_PROJECT_WORK_ITEMS = (0, graphql_tag_1.gql) `
547
563
  ... on WorkItemWidgetLinkedItems {
548
564
  linkedItems {
549
565
  nodes {
550
- id
551
566
  linkType
552
- linkCreatedAt
553
- linkUpdatedAt
554
567
  workItem {
555
568
  id
556
569
  iid
@@ -595,17 +608,19 @@ exports.GET_PROJECT_WORK_ITEMS = (0, graphql_tag_1.gql) `
595
608
  nodes {
596
609
  id
597
610
  name
598
- description
599
611
  active
600
612
  }
601
613
  }
602
- mergeRequests {
614
+ closingMergeRequests {
603
615
  nodes {
604
616
  id
605
- iid
606
- title
607
- state
608
- webUrl
617
+ mergeRequest {
618
+ id
619
+ iid
620
+ title
621
+ state
622
+ webUrl
623
+ }
609
624
  }
610
625
  }
611
626
  }
@@ -630,7 +645,9 @@ exports.GET_PROJECT_WORK_ITEMS = (0, graphql_tag_1.gql) `
630
645
  nodes {
631
646
  id
632
647
  timeSpent
633
- note
648
+ note {
649
+ body
650
+ }
634
651
  spentAt
635
652
  user {
636
653
  id
@@ -647,33 +664,16 @@ exports.GET_PROJECT_WORK_ITEMS = (0, graphql_tag_1.gql) `
647
664
  }
648
665
  }
649
666
  ... on WorkItemWidgetCustomFields {
650
- customFields {
651
- nodes {
652
- id
653
- name
654
- value
655
- fieldType
656
- }
657
- }
667
+ type
658
668
  }
659
669
  ... on WorkItemWidgetErrorTracking {
660
- errorTrackingEnabled
661
- errors {
662
- nodes {
663
- id
664
- status
665
- title
666
- firstSeen
667
- lastSeen
668
- }
669
- }
670
+ identifier
671
+ status
670
672
  }
671
673
  ... on WorkItemWidgetLinkedResources {
672
674
  linkedResources {
673
675
  nodes {
674
- id
675
- type
676
- title
676
+ url
677
677
  }
678
678
  }
679
679
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workItems.js","sourceRoot":"","sources":["../../src/graphql/workItems.ts"],"names":[],"mappings":";;;AAAA,6CAAkC;AAuDrB,QAAA,mBAAmB,GAAG;IACjC,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,eAAe;IAC9B,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,kBAAkB,EAAE,oBAAoB;IACxC,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IACxC,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,KAAK,EAAE,OAAO;IAEd,YAAY,EAAE,cAAc;IAC5B,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,kBAAkB,EAAE,oBAAoB;IACxC,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;CAC1B,CAAC;AAgWE,QAAA,cAAc,GAGvB,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8TN,CAAC;AAEW,QAAA,sBAAsB,GAG/B,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0VN,CAAC;AAEW,QAAA,aAAa,GAA8D,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8E1F,CAAC;AAKW,QAAA,gBAAgB,GAOzB,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;CAoBN,CAAC;AAGW,QAAA,iCAAiC,GAQ1C,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8BN,CAAC;AAEW,QAAA,gBAAgB,GAGzB,IAAA,iBAAG,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDN,CAAC;AAEW,QAAA,gBAAgB,GAGzB,IAAA,iBAAG,EAAA;;;;;;CAMN,CAAC;AAEW,QAAA,mBAAmB,GAG5B,IAAA,iBAAG,EAAA;;;;;;;;;;;CAWN,CAAC"}
1
+ {"version":3,"file":"workItems.js","sourceRoot":"","sources":["../../src/graphql/workItems.ts"],"names":[],"mappings":"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"}
package/dist/server.js CHANGED
@@ -24,16 +24,16 @@ exports.server = new index_js_1.Server({
24
24
  });
25
25
  function determineTransportMode() {
26
26
  const args = process.argv.slice(2);
27
- logger_1.logger.info(`Transport mode detection: args=${JSON.stringify(args)}, SSE=${config_1.SSE}, STREAMABLE_HTTP=${config_1.STREAMABLE_HTTP}`);
28
- if (args.includes('sse') || config_1.SSE) {
29
- logger_1.logger.info('Selected SSE mode');
30
- return 'sse';
27
+ logger_1.logger.info(`Transport mode detection: args=${JSON.stringify(args)}, PORT=${config_1.PORT}`);
28
+ if (args.includes('stdio')) {
29
+ logger_1.logger.info('Selected stdio mode (explicit argument)');
30
+ return 'stdio';
31
31
  }
32
- if (args.includes('streamable-http') || config_1.STREAMABLE_HTTP) {
33
- logger_1.logger.info('Selected streamable-http mode');
34
- return 'streamable-http';
32
+ if (process.env.PORT) {
33
+ logger_1.logger.info('Selected dual transport mode (SSE + StreamableHTTP) - PORT environment variable detected');
34
+ return 'dual';
35
35
  }
36
- logger_1.logger.info('Defaulting to stdio mode');
36
+ logger_1.logger.info('Selected stdio mode (no PORT environment variable)');
37
37
  return 'stdio';
38
38
  }
39
39
  async function startServer() {
@@ -85,11 +85,11 @@ async function startServer() {
85
85
  const app = (0, express_1.default)();
86
86
  app.use(express_1.default.json());
87
87
  const streamableTransports = {};
88
- app.post('/mcp', async (req, res) => {
88
+ app.all('/mcp', async (req, res) => {
89
89
  const sessionId = req.headers['mcp-session-id'];
90
90
  try {
91
91
  let transport;
92
- if (sessionId in streamableTransports) {
92
+ if (sessionId && sessionId in streamableTransports) {
93
93
  transport = streamableTransports[sessionId];
94
94
  await transport.handleRequest(req, res, req.body);
95
95
  }
@@ -98,7 +98,76 @@ async function startServer() {
98
98
  sessionIdGenerator: () => Math.random().toString(36).substring(7),
99
99
  onsessioninitialized: (newSessionId) => {
100
100
  streamableTransports[newSessionId] = transport;
101
- logger_1.logger.info(`HTTP session initialized: ${newSessionId}`);
101
+ logger_1.logger.info(`MCP session initialized: ${newSessionId} (method: ${req.method})`);
102
+ },
103
+ onsessionclosed: (closedSessionId) => {
104
+ delete streamableTransports[closedSessionId];
105
+ logger_1.logger.info(`MCP session closed: ${closedSessionId}`);
106
+ },
107
+ });
108
+ await exports.server.connect(transport);
109
+ await transport.handleRequest(req, res, req.body);
110
+ }
111
+ }
112
+ catch (error) {
113
+ logger_1.logger.error({ err: error }, 'Error in StreamableHTTP transport');
114
+ res.status(500).json({ error: 'Internal server error' });
115
+ }
116
+ });
117
+ app.listen(Number(config_1.PORT), config_1.HOST, () => {
118
+ const url = `http://${config_1.HOST}:${config_1.PORT}`;
119
+ logger_1.logger.info(`GitLab MCP Server running on ${url}/mcp`);
120
+ logger_1.logger.info('Supports both SSE (GET) and JSON-RPC (POST) on same endpoint');
121
+ });
122
+ break;
123
+ }
124
+ case 'dual': {
125
+ logger_1.logger.info('Setting up dual transport mode (SSE + StreamableHTTP)...');
126
+ const app = (0, express_1.default)();
127
+ app.use(express_1.default.json());
128
+ const sseTransports = {};
129
+ const streamableTransports = {};
130
+ app.get('/sse', async (req, res) => {
131
+ logger_1.logger.debug('SSE endpoint hit!');
132
+ const transport = new sse_js_1.SSEServerTransport('/messages', res);
133
+ await exports.server.connect(transport);
134
+ const sessionId = transport.sessionId;
135
+ sseTransports[sessionId] = transport;
136
+ logger_1.logger.debug(`SSE transport created with session: ${sessionId}`);
137
+ });
138
+ app.post('/messages', async (req, res) => {
139
+ logger_1.logger.debug('SSE messages endpoint hit!');
140
+ const sessionId = req.query.sessionId;
141
+ if (!sessionId || !sseTransports[sessionId]) {
142
+ return res.status(404).json({ error: 'Session not found' });
143
+ }
144
+ try {
145
+ const transport = sseTransports[sessionId];
146
+ await transport.handlePostMessage(req, res, req.body);
147
+ }
148
+ catch (error) {
149
+ logger_1.logger.error({ err: error }, 'Error handling SSE message');
150
+ res.status(500).json({ error: 'Internal server error' });
151
+ }
152
+ });
153
+ app.all('/mcp', async (req, res) => {
154
+ const sessionId = req.headers['mcp-session-id'];
155
+ try {
156
+ let transport;
157
+ if (sessionId && sessionId in streamableTransports) {
158
+ transport = streamableTransports[sessionId];
159
+ await transport.handleRequest(req, res, req.body);
160
+ }
161
+ else {
162
+ transport = new streamableHttp_js_1.StreamableHTTPServerTransport({
163
+ sessionIdGenerator: () => Math.random().toString(36).substring(7),
164
+ onsessioninitialized: (newSessionId) => {
165
+ streamableTransports[newSessionId] = transport;
166
+ logger_1.logger.info(`MCP session initialized: ${newSessionId} (method: ${req.method})`);
167
+ },
168
+ onsessionclosed: (closedSessionId) => {
169
+ delete streamableTransports[closedSessionId];
170
+ logger_1.logger.info(`MCP session closed: ${closedSessionId}`);
102
171
  },
103
172
  });
104
173
  await exports.server.connect(transport);
@@ -106,13 +175,17 @@ async function startServer() {
106
175
  }
107
176
  }
108
177
  catch (error) {
109
- logger_1.logger.error({ err: error }, 'Error in HTTP transport');
178
+ logger_1.logger.error({ err: error }, 'Error in StreamableHTTP transport');
110
179
  res.status(500).json({ error: 'Internal server error' });
111
180
  }
112
181
  });
113
182
  app.listen(Number(config_1.PORT), config_1.HOST, () => {
114
183
  const url = `http://${config_1.HOST}:${config_1.PORT}`;
115
- logger_1.logger.info(`GitLab MCP Server HTTP running on ${url}`);
184
+ logger_1.logger.info(`GitLab MCP Server running on ${url}`);
185
+ logger_1.logger.info('🔄 Dual Transport Mode Active:');
186
+ logger_1.logger.info(` 📡 SSE endpoint: ${url}/sse (backwards compatibility)`);
187
+ logger_1.logger.info(` 🚀 StreamableHTTP endpoint: ${url}/mcp (modern, supports SSE + JSON-RPC)`);
188
+ logger_1.logger.info('Clients can use either transport as needed');
116
189
  });
117
190
  break;
118
191
  }
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}