efficient-gitlab-mcp-server 2.4.0 → 2.5.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.
- package/dist/index.js +32 -23
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -54123,6 +54123,27 @@ function registerIssueTools(server, logger2) {
|
|
|
54123
54123
|
return tools;
|
|
54124
54124
|
}
|
|
54125
54125
|
// src/tools/merge-requests.ts
|
|
54126
|
+
var MAX_PATTERN_LENGTH = 200;
|
|
54127
|
+
var NESTED_QUANTIFIER_RE = /(\+|\*|\{)\s*(\+|\*|\{)/;
|
|
54128
|
+
function safeCompilePatterns(patterns) {
|
|
54129
|
+
return patterns.map((p) => {
|
|
54130
|
+
if (p.length > MAX_PATTERN_LENGTH || NESTED_QUANTIFIER_RE.test(p))
|
|
54131
|
+
return null;
|
|
54132
|
+
try {
|
|
54133
|
+
return new RegExp(p);
|
|
54134
|
+
} catch {
|
|
54135
|
+
return null;
|
|
54136
|
+
}
|
|
54137
|
+
}).filter((re) => re !== null);
|
|
54138
|
+
}
|
|
54139
|
+
function filterDiffsByPatterns(diffs, patterns) {
|
|
54140
|
+
if (!patterns?.length)
|
|
54141
|
+
return diffs;
|
|
54142
|
+
const regexes = safeCompilePatterns(patterns);
|
|
54143
|
+
if (regexes.length === 0)
|
|
54144
|
+
return diffs;
|
|
54145
|
+
return diffs.filter((d) => !regexes.some((re) => re.test(d.new_path) || (d.old_path ? re.test(d.old_path) : false)));
|
|
54146
|
+
}
|
|
54126
54147
|
var GetMergeRequestSchema = exports_external.object({
|
|
54127
54148
|
project_id: exports_external.string().describe("Project ID or URL-encoded path"),
|
|
54128
54149
|
merge_request_iid: exports_external.number().optional().describe("Merge request IID"),
|
|
@@ -54177,7 +54198,8 @@ var GetMergeRequestDiffsSchema = exports_external.object({
|
|
|
54177
54198
|
project_id: exports_external.string().describe("Project ID or URL-encoded path"),
|
|
54178
54199
|
merge_request_iid: exports_external.number().describe("Merge request IID"),
|
|
54179
54200
|
page: exports_external.number().optional().describe("Page number"),
|
|
54180
|
-
per_page: exports_external.number().optional().describe("Results per page")
|
|
54201
|
+
per_page: exports_external.number().optional().describe("Results per page"),
|
|
54202
|
+
excluded_file_patterns: exports_external.array(exports_external.string()).optional().describe('Array of regex patterns to exclude files. Examples: ["^vendor/", "\\.pb\\.go$"]')
|
|
54181
54203
|
});
|
|
54182
54204
|
var ListMergeRequestDiscussionsSchema = exports_external.object({
|
|
54183
54205
|
project_id: exports_external.string().describe("Project ID or URL-encoded path"),
|
|
@@ -54465,20 +54487,24 @@ function registerMergeRequestTools(server, logger2) {
|
|
|
54465
54487
|
tools.set("merge_merge_request", toolRef5);
|
|
54466
54488
|
const toolRef6 = server.registerTool("get_merge_request_diffs", {
|
|
54467
54489
|
title: "Get Merge Request Diffs",
|
|
54468
|
-
description: "Get the changes/diffs of a merge request",
|
|
54490
|
+
description: "Get the changes/diffs of a merge request. Supports excluded_file_patterns filtering using regex.",
|
|
54469
54491
|
inputSchema: {
|
|
54470
54492
|
project_id: exports_external.string().describe("Project ID or URL-encoded path"),
|
|
54471
54493
|
merge_request_iid: exports_external.number().describe("Merge request IID"),
|
|
54472
54494
|
page: exports_external.number().optional().describe("Page number"),
|
|
54473
|
-
per_page: exports_external.number().optional().describe("Results per page")
|
|
54495
|
+
per_page: exports_external.number().optional().describe("Results per page"),
|
|
54496
|
+
excluded_file_patterns: exports_external.array(exports_external.string()).optional().describe('Array of regex patterns to exclude files. Examples: ["^vendor/", "\\.pb\\.go$"]')
|
|
54474
54497
|
},
|
|
54475
54498
|
annotations: { readOnlyHint: true }
|
|
54476
54499
|
}, async (params) => {
|
|
54477
54500
|
const args = GetMergeRequestDiffsSchema.parse(params);
|
|
54478
54501
|
const projectId = encodeProjectId(args.project_id);
|
|
54479
54502
|
const query = buildQueryString({ page: args.page, per_page: args.per_page });
|
|
54480
|
-
const
|
|
54481
|
-
|
|
54503
|
+
const mr = await defaultClient.get(`/projects/${projectId}/merge_requests/${args.merge_request_iid}/changes${query}`);
|
|
54504
|
+
const changes = filterDiffsByPatterns(mr.changes ?? [], args.excluded_file_patterns);
|
|
54505
|
+
return {
|
|
54506
|
+
content: [{ type: "text", text: JSON.stringify({ ...mr, changes }, null, 2) }]
|
|
54507
|
+
};
|
|
54482
54508
|
});
|
|
54483
54509
|
toolRef6.disable();
|
|
54484
54510
|
tools.set("get_merge_request_diffs", toolRef6);
|
|
@@ -54708,24 +54734,7 @@ function registerMergeRequestTools(server, logger2) {
|
|
|
54708
54734
|
renamed_file: c.renamed_file,
|
|
54709
54735
|
deleted_file: c.deleted_file
|
|
54710
54736
|
}));
|
|
54711
|
-
|
|
54712
|
-
const patterns = [];
|
|
54713
|
-
for (const p of args.excluded_file_patterns) {
|
|
54714
|
-
try {
|
|
54715
|
-
patterns.push(new RegExp(p));
|
|
54716
|
-
} catch {
|
|
54717
|
-
return {
|
|
54718
|
-
content: [
|
|
54719
|
-
{
|
|
54720
|
-
type: "text",
|
|
54721
|
-
text: JSON.stringify({ error: `Invalid regex pattern: ${p}` }, null, 2)
|
|
54722
|
-
}
|
|
54723
|
-
]
|
|
54724
|
-
};
|
|
54725
|
-
}
|
|
54726
|
-
}
|
|
54727
|
-
files = files.filter((f) => !patterns.some((re) => re.test(f.new_path) || re.test(f.old_path)));
|
|
54728
|
-
}
|
|
54737
|
+
files = filterDiffsByPatterns(files, args.excluded_file_patterns);
|
|
54729
54738
|
return { content: [{ type: "text", text: JSON.stringify(files, null, 2) }] };
|
|
54730
54739
|
});
|
|
54731
54740
|
toolRef18.disable();
|
package/package.json
CHANGED