gitlab-mcp 1.1.0 → 1.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 (106) hide show
  1. package/LICENSE +21 -0
  2. package/dist/config/env.d.ts +56 -0
  3. package/dist/config/env.js +163 -0
  4. package/dist/config/env.js.map +1 -0
  5. package/dist/http-app.d.ts +45 -0
  6. package/dist/http-app.js +550 -0
  7. package/dist/http-app.js.map +1 -0
  8. package/dist/http.d.ts +2 -0
  9. package/dist/http.js +65 -0
  10. package/dist/http.js.map +1 -0
  11. package/dist/index.d.ts +2 -0
  12. package/dist/index.js +65 -0
  13. package/dist/index.js.map +1 -0
  14. package/dist/lib/auth-context.d.ts +9 -0
  15. package/dist/lib/auth-context.js +9 -0
  16. package/dist/lib/auth-context.js.map +1 -0
  17. package/dist/lib/gitlab-client.d.ts +331 -0
  18. package/dist/lib/gitlab-client.js +1025 -0
  19. package/dist/lib/gitlab-client.js.map +1 -0
  20. package/dist/lib/logger.d.ts +2 -0
  21. package/dist/lib/logger.js +13 -0
  22. package/dist/lib/logger.js.map +1 -0
  23. package/dist/lib/network.d.ts +3 -0
  24. package/dist/lib/network.js +38 -0
  25. package/dist/lib/network.js.map +1 -0
  26. package/dist/lib/oauth.d.ts +29 -0
  27. package/dist/lib/oauth.js +220 -0
  28. package/dist/lib/oauth.js.map +1 -0
  29. package/dist/lib/output.d.ts +14 -0
  30. package/dist/lib/output.js +38 -0
  31. package/dist/lib/output.js.map +1 -0
  32. package/dist/lib/policy.d.ts +25 -0
  33. package/dist/lib/policy.js +48 -0
  34. package/dist/lib/policy.js.map +1 -0
  35. package/dist/lib/request-runtime.d.ts +26 -0
  36. package/dist/lib/request-runtime.js +323 -0
  37. package/dist/lib/request-runtime.js.map +1 -0
  38. package/dist/lib/sanitize.d.ts +1 -0
  39. package/dist/lib/sanitize.js +21 -0
  40. package/dist/lib/sanitize.js.map +1 -0
  41. package/dist/lib/session-capacity.d.ts +8 -0
  42. package/dist/lib/session-capacity.js +7 -0
  43. package/dist/lib/session-capacity.js.map +1 -0
  44. package/dist/server/build-server.d.ts +3 -0
  45. package/dist/server/build-server.js +13 -0
  46. package/dist/server/build-server.js.map +1 -0
  47. package/dist/tools/gitlab.d.ts +9 -0
  48. package/dist/tools/gitlab.js +2576 -0
  49. package/dist/tools/gitlab.js.map +1 -0
  50. package/dist/tools/health.d.ts +2 -0
  51. package/dist/tools/health.js +21 -0
  52. package/dist/tools/health.js.map +1 -0
  53. package/dist/tools/mr-code-context.d.ts +38 -0
  54. package/dist/tools/mr-code-context.js +330 -0
  55. package/dist/tools/mr-code-context.js.map +1 -0
  56. package/{src/types/context.ts → dist/types/context.d.ts} +5 -6
  57. package/dist/types/context.js +2 -0
  58. package/dist/types/context.js.map +1 -0
  59. package/docs/configuration.md +6 -6
  60. package/docs/mcp-integration-testing-best-practices.md +981 -0
  61. package/package.json +13 -1
  62. package/.dockerignore +0 -7
  63. package/.editorconfig +0 -9
  64. package/.env.example +0 -75
  65. package/.github/workflows/nodejs.yml +0 -31
  66. package/.github/workflows/npm-publish.yml +0 -31
  67. package/.husky/pre-commit +0 -1
  68. package/.nvmrc +0 -1
  69. package/.prettierrc.json +0 -6
  70. package/Dockerfile +0 -20
  71. package/docker-compose.yml +0 -10
  72. package/eslint.config.js +0 -23
  73. package/scripts/get-oauth-token.example.sh +0 -15
  74. package/src/config/env.ts +0 -171
  75. package/src/http.ts +0 -620
  76. package/src/index.ts +0 -77
  77. package/src/lib/auth-context.ts +0 -19
  78. package/src/lib/gitlab-client.ts +0 -1810
  79. package/src/lib/logger.ts +0 -17
  80. package/src/lib/network.ts +0 -45
  81. package/src/lib/oauth.ts +0 -287
  82. package/src/lib/output.ts +0 -51
  83. package/src/lib/policy.ts +0 -78
  84. package/src/lib/request-runtime.ts +0 -376
  85. package/src/lib/sanitize.ts +0 -25
  86. package/src/lib/session-capacity.ts +0 -14
  87. package/src/server/build-server.ts +0 -17
  88. package/src/tools/gitlab.ts +0 -3135
  89. package/src/tools/health.ts +0 -27
  90. package/src/tools/mr-code-context.ts +0 -473
  91. package/tests/auth-context.test.ts +0 -102
  92. package/tests/gitlab-client.test.ts +0 -672
  93. package/tests/graphql-guard.test.ts +0 -121
  94. package/tests/integration/agent-loop.integration.test.ts +0 -558
  95. package/tests/integration/server.integration.test.ts +0 -543
  96. package/tests/mr-code-context.test.ts +0 -600
  97. package/tests/oauth.test.ts +0 -43
  98. package/tests/output.test.ts +0 -186
  99. package/tests/policy.test.ts +0 -324
  100. package/tests/request-runtime.test.ts +0 -252
  101. package/tests/sanitize.test.ts +0 -123
  102. package/tests/session-capacity.test.ts +0 -49
  103. package/tests/upload-reference.test.ts +0 -88
  104. package/tsconfig.build.json +0 -11
  105. package/tsconfig.json +0 -21
  106. package/vitest.config.ts +0 -12
@@ -0,0 +1,323 @@
1
+ import { exec as execCb } from "node:child_process";
2
+ import * as fs from "node:fs/promises";
3
+ import * as os from "node:os";
4
+ import * as path from "node:path";
5
+ import { promisify } from "node:util";
6
+ import fetchCookie from "fetch-cookie";
7
+ import { Cookie, CookieJar } from "tough-cookie";
8
+ import { deriveGitLabBaseUrl, GitLabOAuthManager } from "./oauth.js";
9
+ const execAsync = promisify(execCb);
10
+ const DEFAULT_BROWSER_UA = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36";
11
+ export class GitLabRequestRuntime {
12
+ env;
13
+ logger;
14
+ cookiePath;
15
+ warmupPath;
16
+ tokenFilePath;
17
+ tokenScript;
18
+ oauthManager;
19
+ fetchImpl = fetch;
20
+ cookieJar = null;
21
+ cookieMtime = 0;
22
+ cookieReloadLock = null;
23
+ warmedApiRoots = new Set();
24
+ cachedToken = null;
25
+ constructor(env, logger) {
26
+ this.env = env;
27
+ this.logger = logger;
28
+ this.cookiePath = resolveHomePath(env.GITLAB_AUTH_COOKIE_PATH);
29
+ this.warmupPath = normalizeWarmupPath(env.GITLAB_COOKIE_WARMUP_PATH);
30
+ this.tokenFilePath = resolveHomePath(env.GITLAB_TOKEN_FILE);
31
+ this.tokenScript = env.GITLAB_TOKEN_SCRIPT?.trim() || undefined;
32
+ if (env.GITLAB_USE_OAUTH && env.GITLAB_OAUTH_CLIENT_ID) {
33
+ this.oauthManager = new GitLabOAuthManager({
34
+ clientId: env.GITLAB_OAUTH_CLIENT_ID,
35
+ clientSecret: env.GITLAB_OAUTH_CLIENT_SECRET,
36
+ gitlabUrl: env.GITLAB_OAUTH_GITLAB_URL || deriveGitLabBaseUrl(env.GITLAB_API_URL),
37
+ redirectUri: env.GITLAB_OAUTH_REDIRECT_URI || "http://127.0.0.1:8765/callback",
38
+ scopes: parseOauthScopes(env.GITLAB_OAUTH_SCOPES),
39
+ tokenStoragePath: resolveHomePath(env.GITLAB_OAUTH_TOKEN_PATH),
40
+ autoOpenBrowser: env.GITLAB_OAUTH_AUTO_OPEN_BROWSER
41
+ }, this.logger);
42
+ }
43
+ }
44
+ async beforeRequest(context) {
45
+ await this.reloadCookiesIfChanged();
46
+ const headers = new Headers(context.headers);
47
+ this.applyCompatibilityHeaders(headers);
48
+ let token = context.token;
49
+ let authHeader = context.authHeader;
50
+ if (!token) {
51
+ const resolvedFallback = await this.resolveFallbackAuth();
52
+ token = resolvedFallback.token;
53
+ if (!authHeader && resolvedFallback.authHeader) {
54
+ authHeader = resolvedFallback.authHeader;
55
+ }
56
+ }
57
+ if (this.cookieJar) {
58
+ await this.ensureSessionWarmup(context.url, headers, token);
59
+ }
60
+ return {
61
+ headers,
62
+ token,
63
+ authHeader,
64
+ fetchImpl: this.fetchImpl
65
+ };
66
+ }
67
+ async resolveFallbackAuth() {
68
+ const now = Date.now();
69
+ if (this.cachedToken && this.cachedToken.expiresAt > now) {
70
+ return { token: this.cachedToken.value };
71
+ }
72
+ if (this.oauthManager) {
73
+ const token = await this.oauthManager.getAccessToken();
74
+ if (token) {
75
+ return {
76
+ token,
77
+ authHeader: "authorization"
78
+ };
79
+ }
80
+ }
81
+ if (this.tokenScript) {
82
+ const token = await this.loadTokenFromScript(this.tokenScript);
83
+ if (token) {
84
+ const ttlMs = this.env.GITLAB_TOKEN_CACHE_SECONDS * 1000;
85
+ this.cachedToken = {
86
+ value: token,
87
+ expiresAt: now + ttlMs
88
+ };
89
+ }
90
+ return { token };
91
+ }
92
+ if (this.tokenFilePath) {
93
+ const token = await this.loadTokenFromFile(this.tokenFilePath);
94
+ if (token) {
95
+ const ttlMs = this.env.GITLAB_TOKEN_CACHE_SECONDS * 1000;
96
+ this.cachedToken = {
97
+ value: token,
98
+ expiresAt: now + ttlMs
99
+ };
100
+ }
101
+ return { token };
102
+ }
103
+ return {};
104
+ }
105
+ async loadTokenFromScript(script) {
106
+ try {
107
+ const { stdout } = await execAsync(script, {
108
+ timeout: this.env.GITLAB_TOKEN_SCRIPT_TIMEOUT_MS,
109
+ maxBuffer: 1024 * 1024
110
+ });
111
+ return parseTokenOutput(stdout);
112
+ }
113
+ catch (error) {
114
+ this.logger.warn({ err: error }, "Failed to execute GITLAB_TOKEN_SCRIPT");
115
+ return undefined;
116
+ }
117
+ }
118
+ async loadTokenFromFile(tokenFilePath) {
119
+ try {
120
+ const stat = await fs.stat(tokenFilePath);
121
+ // Group/other bits on token files are rejected unless explicitly allowed.
122
+ if ((stat.mode & 0o077) !== 0 && !this.env.GITLAB_ALLOW_INSECURE_TOKEN_FILE) {
123
+ throw new Error(`Token file '${tokenFilePath}' is too permissive. Set chmod 600 or GITLAB_ALLOW_INSECURE_TOKEN_FILE=true.`);
124
+ }
125
+ const content = (await fs.readFile(tokenFilePath, "utf8")).trim();
126
+ return parseTokenOutput(content);
127
+ }
128
+ catch (error) {
129
+ this.logger.warn({ err: error, tokenFilePath }, "Failed to read GITLAB_TOKEN_FILE");
130
+ return undefined;
131
+ }
132
+ }
133
+ applyCompatibilityHeaders(headers) {
134
+ const userAgent = this.env.GITLAB_USER_AGENT?.trim() ||
135
+ (this.env.GITLAB_CLOUDFLARE_BYPASS ? DEFAULT_BROWSER_UA : undefined);
136
+ if (userAgent && !headers.has("User-Agent")) {
137
+ headers.set("User-Agent", userAgent);
138
+ }
139
+ if (this.env.GITLAB_CLOUDFLARE_BYPASS) {
140
+ if (!headers.has("Accept-Language")) {
141
+ headers.set("Accept-Language", this.env.GITLAB_ACCEPT_LANGUAGE || "en-US,en;q=0.9");
142
+ }
143
+ if (!headers.has("Cache-Control")) {
144
+ headers.set("Cache-Control", "no-cache");
145
+ }
146
+ if (!headers.has("Pragma")) {
147
+ headers.set("Pragma", "no-cache");
148
+ }
149
+ }
150
+ }
151
+ async reloadCookiesIfChanged() {
152
+ if (!this.cookiePath) {
153
+ return;
154
+ }
155
+ if (this.cookieReloadLock) {
156
+ await this.cookieReloadLock;
157
+ return;
158
+ }
159
+ this.cookieReloadLock = (async () => {
160
+ try {
161
+ const stat = await fs.stat(this.cookiePath);
162
+ if (stat.mtimeMs === this.cookieMtime) {
163
+ return;
164
+ }
165
+ const cookieContent = await fs.readFile(this.cookiePath, "utf8");
166
+ const jar = createCookieJarFromNetscape(cookieContent);
167
+ this.cookieJar = jar;
168
+ this.fetchImpl = fetchCookie(fetch, jar);
169
+ this.cookieMtime = stat.mtimeMs;
170
+ this.warmedApiRoots.clear();
171
+ this.logger.info({ cookiePath: this.cookiePath }, "Loaded auth cookies");
172
+ }
173
+ catch (error) {
174
+ if (this.cookieJar) {
175
+ this.logger.warn({ err: error, cookiePath: this.cookiePath }, "Clearing auth cookies");
176
+ }
177
+ this.cookieJar = null;
178
+ this.fetchImpl = fetch;
179
+ this.cookieMtime = 0;
180
+ this.warmedApiRoots.clear();
181
+ }
182
+ })();
183
+ try {
184
+ await this.cookieReloadLock;
185
+ }
186
+ finally {
187
+ this.cookieReloadLock = null;
188
+ }
189
+ }
190
+ async ensureSessionWarmup(url, headers, token) {
191
+ const apiRoot = resolveApiRoot(url);
192
+ if (!apiRoot) {
193
+ return;
194
+ }
195
+ const apiRootKey = `${url.origin}${apiRoot}`;
196
+ if (this.warmedApiRoots.has(apiRootKey)) {
197
+ return;
198
+ }
199
+ const warmupUrl = new URL(`${apiRoot}${this.warmupPath}`, url.origin);
200
+ const warmupHeaders = new Headers(headers);
201
+ if (!warmupHeaders.has("Accept")) {
202
+ warmupHeaders.set("Accept", "application/json");
203
+ }
204
+ if (token && !warmupHeaders.has("PRIVATE-TOKEN")) {
205
+ warmupHeaders.set("PRIVATE-TOKEN", token);
206
+ }
207
+ try {
208
+ const response = await this.fetchImpl(warmupUrl, {
209
+ method: "GET",
210
+ headers: warmupHeaders,
211
+ redirect: "follow",
212
+ signal: AbortSignal.timeout(Math.min(this.env.GITLAB_HTTP_TIMEOUT_MS, 12_000))
213
+ });
214
+ if (response.status < 500) {
215
+ this.warmedApiRoots.add(apiRootKey);
216
+ }
217
+ }
218
+ catch (error) {
219
+ this.logger.debug({ err: error, warmupUrl: warmupUrl.toString() }, "Cookie warmup failed");
220
+ }
221
+ }
222
+ }
223
+ function resolveHomePath(input) {
224
+ if (!input) {
225
+ return undefined;
226
+ }
227
+ if (input.startsWith("~/")) {
228
+ return path.join(os.homedir(), input.slice(2));
229
+ }
230
+ return input;
231
+ }
232
+ function normalizeWarmupPath(value) {
233
+ const trimmed = value.trim();
234
+ if (!trimmed) {
235
+ return "/user";
236
+ }
237
+ return trimmed.startsWith("/") ? trimmed : `/${trimmed}`;
238
+ }
239
+ function resolveApiRoot(url) {
240
+ const match = url.pathname.match(/^(.*\/api\/v4)(?:\/|$)/);
241
+ return match?.[1];
242
+ }
243
+ function createCookieJarFromNetscape(content) {
244
+ const jar = new CookieJar();
245
+ const lines = content.split("\n");
246
+ for (let raw of lines) {
247
+ let httpOnly = false;
248
+ if (raw.startsWith("#HttpOnly_")) {
249
+ raw = raw.slice("#HttpOnly_".length);
250
+ httpOnly = true;
251
+ }
252
+ if (!raw.trim() || raw.startsWith("#")) {
253
+ continue;
254
+ }
255
+ const parts = raw.split("\t");
256
+ if (parts.length < 7) {
257
+ continue;
258
+ }
259
+ const domain = parts[0];
260
+ const cookiePath = parts[2];
261
+ const secure = parts[3];
262
+ const expires = parts[4];
263
+ const name = parts[5];
264
+ const value = parts[6];
265
+ if (domain === undefined ||
266
+ cookiePath === undefined ||
267
+ secure === undefined ||
268
+ expires === undefined ||
269
+ name === undefined ||
270
+ value === undefined) {
271
+ continue;
272
+ }
273
+ const secureFlag = secure === "TRUE" ? "; Secure" : "";
274
+ const httpOnlyFlag = httpOnly ? "; HttpOnly" : "";
275
+ const expiresFlag = expires === "0"
276
+ ? ""
277
+ : `; Expires=${new Date(Number.parseInt(expires, 10) * 1000).toUTCString()}`;
278
+ const cookieString = `${name}=${value}; Domain=${domain}; Path=${cookiePath}${secureFlag}${httpOnlyFlag}${expiresFlag}`;
279
+ const cookie = Cookie.parse(cookieString);
280
+ if (!cookie) {
281
+ continue;
282
+ }
283
+ const normalizedDomain = domain.startsWith(".") ? domain.slice(1) : domain;
284
+ const targetUrl = `${secure === "TRUE" ? "https" : "http"}://${normalizedDomain}`;
285
+ try {
286
+ jar.setCookieSync(cookie, targetUrl);
287
+ }
288
+ catch {
289
+ // ignore invalid cookies from external files
290
+ }
291
+ }
292
+ return jar;
293
+ }
294
+ function parseTokenOutput(rawOutput) {
295
+ const output = rawOutput.trim();
296
+ if (!output) {
297
+ return undefined;
298
+ }
299
+ try {
300
+ const parsed = JSON.parse(output);
301
+ const token = getStringField(parsed, "token") ||
302
+ getStringField(parsed, "access_token") ||
303
+ getStringField(parsed, "private_token");
304
+ if (token) {
305
+ return token;
306
+ }
307
+ }
308
+ catch {
309
+ // Plain string output is valid.
310
+ }
311
+ return output.split(/\r?\n/, 1)[0]?.trim() || undefined;
312
+ }
313
+ function getStringField(record, key) {
314
+ const value = record[key];
315
+ return typeof value === "string" && value.trim().length > 0 ? value.trim() : undefined;
316
+ }
317
+ function parseOauthScopes(rawScopes) {
318
+ return rawScopes
319
+ .split(/[,\s]+/)
320
+ .map((scope) => scope.trim())
321
+ .filter((scope) => scope.length > 0);
322
+ }
323
+ //# sourceMappingURL=request-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-runtime.js","sourceRoot":"","sources":["../../src/lib/request-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function stripNullsDeep<T>(value: T): T;
@@ -0,0 +1,21 @@
1
+ export function stripNullsDeep(value) {
2
+ if (value === null) {
3
+ return undefined;
4
+ }
5
+ if (Array.isArray(value)) {
6
+ return value.map((item) => stripNullsDeep(item)).filter((item) => item !== undefined);
7
+ }
8
+ if (typeof value === "object" && value !== undefined) {
9
+ const input = value;
10
+ const output = {};
11
+ for (const [key, item] of Object.entries(input)) {
12
+ const normalized = stripNullsDeep(item);
13
+ if (normalized !== undefined) {
14
+ output[key] = normalized;
15
+ }
16
+ }
17
+ return output;
18
+ }
19
+ return value;
20
+ }
21
+ //# sourceMappingURL=sanitize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../src/lib/sanitize.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc,CAAI,KAAQ;IACxC,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACnB,OAAO,SAAc,CAAC;IACxB,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,CAAM,CAAC;IAC7F,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACrD,MAAM,KAAK,GAAG,KAAgC,CAAC;QAC/C,MAAM,MAAM,GAA4B,EAAE,CAAC;QAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChD,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;YACxC,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBAC7B,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;YAC3B,CAAC;QACH,CAAC;QAED,OAAO,MAAW,CAAC;IACrB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface SessionCapacityInput {
2
+ streamableSessions: number;
3
+ pendingSessions: number;
4
+ sseSessions: number;
5
+ maxSessions: number;
6
+ }
7
+ export declare function getTotalSessions(input: SessionCapacityInput): number;
8
+ export declare function hasReachedSessionCapacity(input: SessionCapacityInput): boolean;
@@ -0,0 +1,7 @@
1
+ export function getTotalSessions(input) {
2
+ return input.streamableSessions + input.pendingSessions + input.sseSessions;
3
+ }
4
+ export function hasReachedSessionCapacity(input) {
5
+ return getTotalSessions(input) >= input.maxSessions;
6
+ }
7
+ //# sourceMappingURL=session-capacity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-capacity.js","sourceRoot":"","sources":["../../src/lib/session-capacity.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,gBAAgB,CAAC,KAA2B;IAC1D,OAAO,KAAK,CAAC,kBAAkB,GAAG,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,WAAW,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAA2B;IACnE,OAAO,gBAAgB,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC;AACtD,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { AppContext } from "../types/context.js";
3
+ export declare function createMcpServer(context: AppContext): McpServer;
@@ -0,0 +1,13 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { registerGitLabTools } from "../tools/gitlab.js";
3
+ import { registerHealthTool } from "../tools/health.js";
4
+ export function createMcpServer(context) {
5
+ const server = new McpServer({
6
+ name: context.env.MCP_SERVER_NAME,
7
+ version: context.env.MCP_SERVER_VERSION
8
+ });
9
+ registerHealthTool(server);
10
+ registerGitLabTools(server, context);
11
+ return server;
12
+ }
13
+ //# sourceMappingURL=build-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-server.js","sourceRoot":"","sources":["../../src/server/build-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAGxD,MAAM,UAAU,eAAe,CAAC,OAAmB;IACjD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;QAC3B,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe;QACjC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,kBAAkB;KACxC,CAAC,CAAC;IAEH,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC3B,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAErC,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { AppContext } from "../types/context.js";
3
+ export declare function registerGitLabTools(server: McpServer, context: AppContext): void;
4
+ export declare function containsGraphqlMutation(query: string): boolean;
5
+ export declare function parseProjectUploadReference(input: string): {
6
+ secret: string;
7
+ filename: string;
8
+ } | undefined;
9
+ export declare function shouldDisableGraphqlTools(allowedProjectIds: string[], allowGraphqlWithProjectScope: boolean): boolean;