@zereight/mcp-gitlab 2.1.42 → 2.1.44
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/README.ko.md +3 -3
- package/README.md +10 -4
- package/README.zh-CN.md +3 -3
- package/build/downloads/proxy.js +3 -2
- package/build/index.js +297 -50
- package/build/oauth-proxy.js +2 -2
- package/build/oauth.js +2 -5
- package/build/schemas.js +67 -0
- package/build/scripts/check-skill-sync.js +1 -0
- package/build/scripts/generate-tool-docs.js +6 -1
- package/build/test/dynamic-api-url-allowlist.test.js +18 -1
- package/build/test/test-health-check.js +106 -0
- package/build/test/test-toolset-filtering.js +2 -0
- package/build/test/test-vulnerabilities.js +399 -0
- package/build/test/utils/gitlab-instance-version.test.js +32 -0
- package/build/test/utils/mock-gitlab-server.js +8 -0
- package/build/tools/registry.js +35 -2
- package/build/utils/gitlab-instance-version.js +16 -0
- package/build/utils/logger.js +51 -0
- package/package.json +1 -1
package/build/tools/registry.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { zodToJsonSchema } from "zod-to-json-schema";
|
|
2
2
|
import { toJSONSchema } from "../utils/schema.js";
|
|
3
3
|
import { USE_GITLAB_WIKI, USE_MILESTONE, USE_PIPELINE, SSE, STREAMABLE_HTTP, } from "../config.js";
|
|
4
|
-
import { ApproveMergeRequestSchema, BulkPublishDraftNotesSchema, CancelPipelineJobSchema, CancelPipelineSchema, ConvertWorkItemTypeSchema, CreateBranchSchema, CreateDraftNoteSchema, CreateGroupSchema, CreateGroupWikiPageSchema, CreateIssueLinkSchema, CreateIssueNoteSchema, CreateIssueSchema, CreateIssueEmojiReactionSchema, CreateIssueNoteEmojiReactionSchema, ListIssueEmojiReactionsSchema, ListIssueNoteEmojiReactionsSchema, CreateLabelSchema, MarkAllTodosDoneSchema, ListTodosSchema, MarkTodoDoneSchema, CreateMergeRequestDiscussionNoteSchema, CreateMergeRequestEmojiReactionSchema, ListMergeRequestEmojiReactionsSchema, ListMergeRequestNoteEmojiReactionsSchema, CreateMergeRequestNoteSchema, CreateMergeRequestNoteEmojiReactionSchema, CreateMergeRequestSchema, CreateMergeRequestThreadSchema, CreateNoteSchema, CreateCommitStatusSchema, CreateOrUpdateFileSchema, CreatePipelineSchema, CreateProjectMilestoneSchema, CreateGroupMilestoneSchema, CreateReleaseEvidenceSchema, CreateReleaseSchema, CreateRepositorySchema, CreateTagSchema, CreateTimelineEventSchema, CreateWikiPageSchema, CreateWorkItemNoteSchema, CreateWorkItemEmojiReactionSchema, CreateWorkItemNoteEmojiReactionSchema, ListWorkItemEmojiReactionsSchema, ListWorkItemNoteEmojiReactionsSchema, CreateWorkItemSchema, DeleteBranchSchema, GetProtectedBranchSchema, ListProtectedBranchesSchema, ProtectBranchSchema, UnprotectBranchSchema, UpdateDefaultBranchSchema, DeleteDraftNoteSchema, DeleteGroupMilestoneSchema, DeleteGroupWikiPageSchema, DeleteIssueLinkSchema, DeleteIssueSchema, DeleteIssueEmojiReactionSchema, DeleteIssueNoteEmojiReactionSchema, DeleteLabelSchema, DeleteMergeRequestDiscussionNoteSchema, DeleteMergeRequestNoteSchema, DeleteMergeRequestEmojiReactionSchema, DeleteMergeRequestNoteEmojiReactionSchema, DeleteProjectMilestoneSchema, DeleteReleaseSchema, DeleteTagSchema, DeleteWikiPageSchema, DeleteWorkItemEmojiReactionSchema, DeleteWorkItemNoteEmojiReactionSchema, DownloadAttachmentSchema, DownloadAttachmentRemoteSchema, DownloadJobArtifactsSchema, DownloadJobArtifactsRemoteSchema, DownloadReleaseAssetSchema, EditProjectMilestoneSchema, EditGroupMilestoneSchema, ExecuteGraphQLSchema, ForkRepositorySchema, HealthCheckSchema, GetBranchSchema, GetBranchDiffsSchema, GetCommitDiffSchema, GetCommitSchema, GetFileBlameSchema, GetDeploymentSchema, GetDraftNoteSchema, GetEnvironmentSchema, GetFileContentsSchema, GetGroupWikiPageSchema, GetIssueLinkSchema, GetIssueSchema, GetJobArtifactFileSchema, GetLabelSchema, GetMergeRequestApprovalStateSchema, GetMergeRequestConflictsSchema, GetMergeRequestDiffsSchema, GetMergeRequestFileDiffSchema, GetMergeRequestNoteSchema, GetMergeRequestNotesSchema, GetMergeRequestSchema, GetMergeRequestVersionSchema, GetMilestoneBurndownEventsSchema, GetMilestoneIssuesSchema, GetMilestoneMergeRequestsSchema, GetGroupMilestoneSchema, GetGroupMilestoneIssuesSchema, GetGroupMilestoneMergeRequestsSchema, GetGroupMilestoneBurndownEventsSchema, GetNamespaceSchema, GetPipelineJobOutputSchema, PipelineJobControlSchema, GetPipelineSchema, GetProjectEventsSchema, GetProjectMilestoneSchema, GetProjectSchema, GetReleaseSchema, GetRepositoryTreeSchema, GetTagSchema, GetTagSignatureSchema, GetTimelineEventsSchema, GetUsersSchema, GetUserSchema, WhoAmISchema, GetWebhookEventSchema, GetWikiPageSchema, GetWorkItemSchema, ListBranchesSchema, ListCommitsSchema, ListCommitStatusesSchema, ListCustomFieldDefinitionsSchema, ListDeploymentsSchema, ListDraftNotesSchema, ListEnvironmentsSchema, ListEventsSchema, ListGroupIterationsSchema, ListGroupMilestonesSchema, ListGroupProjectsSchema, ListGroupWikiPagesSchema, ListIssueDiscussionsSchema, ListIssueLinksSchema, ListIssuesSchema, ListJobArtifactsSchema, ListLabelsSchema, ListMergeRequestChangedFilesSchema, ListMergeRequestDiffsSchema, ListMergeRequestDiscussionsSchema, ListMergeRequestPipelinesSchema, ListMergeRequestVersionsSchema, ListMergeRequestsSchema, ListNamespacesSchema, ListPipelineJobsSchema, ListPipelineTriggerJobsSchema, ValidateCiLintSchema, ValidateProjectCiLintSchema, ListCiCatalogResourcesSchema, GetCiCatalogResourceSchema, ListPipelinesSchema, ListProjectMembersSchema, ListProjectMilestonesSchema, ListProjectsSchema, ListReleasesSchema, ListTagsSchema, ListWebhookEventsSchema, ListWebhooksSchema, ListWikiPagesSchema, ListWorkItemNotesSchema, ListWorkItemStatusesSchema, ListWorkItemsSchema, MarkdownUploadSchema, MarkdownUploadRemoteSchema, MergeMergeRequestSchema, MoveWorkItemSchema, MyIssuesSchema, PlayPipelineJobSchema, PromoteProjectMilestoneSchema, PublishDraftNoteSchema, PushFilesSchema, ResolveMergeRequestThreadSchema, RetryPipelineJobSchema, RetryPipelineSchema, SearchCodeSchema, SearchGroupCodeSchema, SearchProjectCodeSchema, SearchRepositoriesSchema, UnapproveMergeRequestSchema, UpdateDraftNoteSchema, UpdateGroupWikiPageSchema, UpdateIssueNoteSchema, UpdateIssueSchema, UpdateIssueDescriptionPatchSchema, UpdateLabelSchema, UpdateProjectSchema, UpdateMergeRequestDiscussionNoteSchema, UpdateMergeRequestNoteSchema, UpdateMergeRequestSchema, UpdateReleaseSchema, UpdateWikiPageSchema, UpdateWorkItemSchema, VerifyNamespaceSchema, ListProjectVariablesSchema, GetProjectVariableSchema, CreateProjectVariableSchema, UpdateProjectVariableSchema, DeleteProjectVariableSchema, ListGroupVariablesSchema, GetGroupVariableSchema, CreateGroupVariableSchema, UpdateGroupVariableSchema, DeleteGroupVariableSchema, GetDependencyProxySettingsSchema, UpdateDependencyProxySettingsSchema, ListDependencyProxyBlobsSchema, PurgeDependencyProxyCacheSchema, } from "../schemas.js";
|
|
4
|
+
import { ApproveMergeRequestSchema, BulkPublishDraftNotesSchema, CancelPipelineJobSchema, CancelPipelineSchema, ConvertWorkItemTypeSchema, CreateBranchSchema, CreateDraftNoteSchema, CreateGroupSchema, CreateGroupWikiPageSchema, CreateIssueLinkSchema, CreateIssueNoteSchema, CreateIssueSchema, CreateIssueEmojiReactionSchema, CreateIssueNoteEmojiReactionSchema, ListIssueEmojiReactionsSchema, ListIssueNoteEmojiReactionsSchema, CreateLabelSchema, MarkAllTodosDoneSchema, ListTodosSchema, MarkTodoDoneSchema, CreateMergeRequestDiscussionNoteSchema, CreateMergeRequestEmojiReactionSchema, ListMergeRequestEmojiReactionsSchema, ListMergeRequestNoteEmojiReactionsSchema, CreateMergeRequestNoteSchema, CreateMergeRequestNoteEmojiReactionSchema, CreateMergeRequestSchema, CreateMergeRequestThreadSchema, CreateNoteSchema, CreateCommitStatusSchema, CreateOrUpdateFileSchema, CreatePipelineSchema, CreateProjectMilestoneSchema, CreateGroupMilestoneSchema, CreateReleaseEvidenceSchema, CreateReleaseSchema, CreateRepositorySchema, CreateTagSchema, CreateTimelineEventSchema, CreateWikiPageSchema, CreateWorkItemNoteSchema, CreateWorkItemEmojiReactionSchema, CreateWorkItemNoteEmojiReactionSchema, ListWorkItemEmojiReactionsSchema, ListWorkItemNoteEmojiReactionsSchema, CreateWorkItemSchema, DeleteBranchSchema, GetProtectedBranchSchema, ListProtectedBranchesSchema, ProtectBranchSchema, UnprotectBranchSchema, UpdateDefaultBranchSchema, DeleteDraftNoteSchema, DeleteGroupMilestoneSchema, DeleteGroupWikiPageSchema, DeleteIssueLinkSchema, DeleteIssueSchema, DeleteIssueEmojiReactionSchema, DeleteIssueNoteEmojiReactionSchema, DeleteLabelSchema, DeleteMergeRequestDiscussionNoteSchema, DeleteMergeRequestNoteSchema, DeleteMergeRequestEmojiReactionSchema, DeleteMergeRequestNoteEmojiReactionSchema, DeleteProjectMilestoneSchema, DeleteReleaseSchema, DeleteTagSchema, DeleteWikiPageSchema, DeleteWorkItemEmojiReactionSchema, DeleteWorkItemNoteEmojiReactionSchema, DownloadAttachmentSchema, DownloadAttachmentRemoteSchema, DownloadJobArtifactsSchema, DownloadJobArtifactsRemoteSchema, DownloadReleaseAssetSchema, EditProjectMilestoneSchema, EditGroupMilestoneSchema, ExecuteGraphQLSchema, ForkRepositorySchema, HealthCheckSchema, GetBranchSchema, GetBranchDiffsSchema, GetCommitDiffSchema, GetCommitSchema, GetFileBlameSchema, GetDeploymentSchema, GetDraftNoteSchema, GetEnvironmentSchema, GetFileContentsSchema, GetGroupWikiPageSchema, GetIssueLinkSchema, GetIssueSchema, GetJobArtifactFileSchema, GetLabelSchema, GetMergeRequestApprovalStateSchema, GetMergeRequestConflictsSchema, GetMergeRequestDiffsSchema, GetMergeRequestFileDiffSchema, GetMergeRequestNoteSchema, GetMergeRequestNotesSchema, GetMergeRequestSchema, GetMergeRequestVersionSchema, GetMilestoneBurndownEventsSchema, GetMilestoneIssuesSchema, GetMilestoneMergeRequestsSchema, GetGroupMilestoneSchema, GetGroupMilestoneIssuesSchema, GetGroupMilestoneMergeRequestsSchema, GetGroupMilestoneBurndownEventsSchema, GetNamespaceSchema, GetPipelineJobOutputSchema, PipelineJobControlSchema, GetPipelineSchema, GetProjectEventsSchema, GetProjectMilestoneSchema, GetProjectSchema, GetReleaseSchema, GetRepositoryTreeSchema, GetTagSchema, GetTagSignatureSchema, GetTimelineEventsSchema, GetUsersSchema, GetUserSchema, WhoAmISchema, GetWebhookEventSchema, GetWikiPageSchema, GetWorkItemSchema, ListBranchesSchema, ListCommitsSchema, ListCommitStatusesSchema, ListCustomFieldDefinitionsSchema, ListDeploymentsSchema, ListDraftNotesSchema, ListEnvironmentsSchema, ListEventsSchema, ListGroupIterationsSchema, ListGroupMilestonesSchema, ListGroupProjectsSchema, ListGroupWikiPagesSchema, ListIssueDiscussionsSchema, ListIssueLinksSchema, ListIssuesSchema, ListJobArtifactsSchema, ListLabelsSchema, ListMergeRequestChangedFilesSchema, ListMergeRequestDiffsSchema, ListMergeRequestDiscussionsSchema, ListMergeRequestPipelinesSchema, ListMergeRequestVersionsSchema, ListMergeRequestsSchema, ListNamespacesSchema, ListPipelineJobsSchema, ListPipelineTriggerJobsSchema, ValidateCiLintSchema, ValidateProjectCiLintSchema, ListCiCatalogResourcesSchema, GetCiCatalogResourceSchema, ListPipelinesSchema, ListProjectMembersSchema, ListProjectMilestonesSchema, ListProjectsSchema, ListReleasesSchema, ListTagsSchema, ListWebhookEventsSchema, ListWebhooksSchema, ListWikiPagesSchema, ListWorkItemNotesSchema, ListWorkItemStatusesSchema, ListWorkItemsSchema, MarkdownUploadSchema, MarkdownUploadRemoteSchema, MergeMergeRequestSchema, MoveWorkItemSchema, MyIssuesSchema, PlayPipelineJobSchema, PromoteProjectMilestoneSchema, PublishDraftNoteSchema, PushFilesSchema, ResolveMergeRequestThreadSchema, RetryPipelineJobSchema, RetryPipelineSchema, SearchCodeSchema, SearchGroupCodeSchema, SearchProjectCodeSchema, SearchRepositoriesSchema, UnapproveMergeRequestSchema, UpdateDraftNoteSchema, UpdateGroupWikiPageSchema, UpdateIssueNoteSchema, UpdateIssueSchema, UpdateIssueDescriptionPatchSchema, UpdateLabelSchema, UpdateProjectSchema, UpdateMergeRequestDiscussionNoteSchema, UpdateMergeRequestNoteSchema, UpdateMergeRequestSchema, UpdateReleaseSchema, UpdateWikiPageSchema, UpdateWorkItemSchema, VerifyNamespaceSchema, ListProjectVariablesSchema, GetProjectVariableSchema, CreateProjectVariableSchema, UpdateProjectVariableSchema, DeleteProjectVariableSchema, ListGroupVariablesSchema, GetGroupVariableSchema, CreateGroupVariableSchema, UpdateGroupVariableSchema, DeleteGroupVariableSchema, GetDependencyProxySettingsSchema, UpdateDependencyProxySettingsSchema, ListDependencyProxyBlobsSchema, PurgeDependencyProxyCacheSchema, ListProjectVulnerabilitiesSchema, GetVulnerabilitySchema, DismissVulnerabilitySchema, ConfirmVulnerabilitySchema, } from "../schemas.js";
|
|
5
5
|
const IS_REMOTE = SSE || STREAMABLE_HTTP;
|
|
6
6
|
// Define all available tools
|
|
7
7
|
export const allTools = [
|
|
@@ -813,7 +813,7 @@ export const allTools = [
|
|
|
813
813
|
},
|
|
814
814
|
{
|
|
815
815
|
name: "health_check",
|
|
816
|
-
description: "Verify server status and authentication",
|
|
816
|
+
description: "Verify server status and authentication. When authenticated, also reports the GitLab instance version from GET /api/v4/version (version, revision, enterprise). Version lookup failures do not fail the health check — those fields are omitted.",
|
|
817
817
|
inputSchema: toJSONSchema(HealthCheckSchema),
|
|
818
818
|
},
|
|
819
819
|
{
|
|
@@ -1083,6 +1083,27 @@ export const allTools = [
|
|
|
1083
1083
|
description: "Schedule purge of all cached dependency proxy blobs for a group",
|
|
1084
1084
|
inputSchema: toJSONSchema(PurgeDependencyProxyCacheSchema),
|
|
1085
1085
|
},
|
|
1086
|
+
// --- Vulnerability tools ---
|
|
1087
|
+
{
|
|
1088
|
+
name: "list_project_vulnerabilities",
|
|
1089
|
+
description: "List vulnerabilities for a project with optional state, severity, and report type filters (GraphQL-backed, cursor pagination)",
|
|
1090
|
+
inputSchema: toJSONSchema(ListProjectVulnerabilitiesSchema),
|
|
1091
|
+
},
|
|
1092
|
+
{
|
|
1093
|
+
name: "get_vulnerability",
|
|
1094
|
+
description: "Get full details of a specific vulnerability",
|
|
1095
|
+
inputSchema: toJSONSchema(GetVulnerabilitySchema),
|
|
1096
|
+
},
|
|
1097
|
+
{
|
|
1098
|
+
name: "dismiss_vulnerability",
|
|
1099
|
+
description: "Dismiss a vulnerability with a reason (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) and optional comment",
|
|
1100
|
+
inputSchema: toJSONSchema(DismissVulnerabilitySchema),
|
|
1101
|
+
},
|
|
1102
|
+
{
|
|
1103
|
+
name: "confirm_vulnerability",
|
|
1104
|
+
description: "Confirm a vulnerability as a real finding requiring remediation",
|
|
1105
|
+
inputSchema: toJSONSchema(ConfirmVulnerabilitySchema),
|
|
1106
|
+
},
|
|
1086
1107
|
// --- Meta tool: Dynamic tool discovery ---
|
|
1087
1108
|
{
|
|
1088
1109
|
name: "discover_tools",
|
|
@@ -1217,6 +1238,8 @@ export const readOnlyTools = new Set([
|
|
|
1217
1238
|
"get_group_variable",
|
|
1218
1239
|
"get_dependency_proxy_settings",
|
|
1219
1240
|
"list_dependency_proxy_blobs",
|
|
1241
|
+
"list_project_vulnerabilities",
|
|
1242
|
+
"get_vulnerability",
|
|
1220
1243
|
]);
|
|
1221
1244
|
// Define which tools are destructive (data loss potential)
|
|
1222
1245
|
export const destructiveTools = new Set([
|
|
@@ -1653,6 +1676,16 @@ export const TOOLSET_DEFINITIONS = [
|
|
|
1653
1676
|
"purge_dependency_proxy_cache",
|
|
1654
1677
|
]),
|
|
1655
1678
|
},
|
|
1679
|
+
{
|
|
1680
|
+
id: "vulnerabilities",
|
|
1681
|
+
isDefault: false,
|
|
1682
|
+
tools: new Set([
|
|
1683
|
+
"list_project_vulnerabilities",
|
|
1684
|
+
"get_vulnerability",
|
|
1685
|
+
"dismiss_vulnerability",
|
|
1686
|
+
"confirm_vulnerability",
|
|
1687
|
+
]),
|
|
1688
|
+
},
|
|
1656
1689
|
];
|
|
1657
1690
|
// Derived lookup: tool name → toolset ID
|
|
1658
1691
|
export const TOOLSET_BY_TOOL_NAME = new Map();
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function parseGitLabVersionApiResponse(data) {
|
|
2
|
+
if (typeof data !== "object" || data === null || !("version" in data)) {
|
|
3
|
+
return null;
|
|
4
|
+
}
|
|
5
|
+
if (typeof data.version !== "string") {
|
|
6
|
+
return null;
|
|
7
|
+
}
|
|
8
|
+
const metadata = { version: data.version };
|
|
9
|
+
if ("revision" in data && typeof data.revision === "string") {
|
|
10
|
+
metadata.revision = data.revision;
|
|
11
|
+
}
|
|
12
|
+
if ("enterprise" in data && typeof data.enterprise === "boolean") {
|
|
13
|
+
metadata.enterprise = data.enterprise;
|
|
14
|
+
}
|
|
15
|
+
return metadata;
|
|
16
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { pino } from "pino";
|
|
2
|
+
const REDACT_PATHS = [
|
|
3
|
+
"token",
|
|
4
|
+
"*.token",
|
|
5
|
+
"ctx.token",
|
|
6
|
+
"context.token",
|
|
7
|
+
"authData.token",
|
|
8
|
+
"auth.token",
|
|
9
|
+
"headers.authorization",
|
|
10
|
+
"headers.Authorization",
|
|
11
|
+
'headers["private-token"]',
|
|
12
|
+
'headers["Private-Token"]',
|
|
13
|
+
'headers["job-token"]',
|
|
14
|
+
'headers["JOB-TOKEN"]',
|
|
15
|
+
'headers["mcp-session-id"]',
|
|
16
|
+
'headers["Mcp-Session-Id"]',
|
|
17
|
+
"sessionId",
|
|
18
|
+
"*.sessionId",
|
|
19
|
+
"ctx.sessionId",
|
|
20
|
+
"context.sessionId",
|
|
21
|
+
];
|
|
22
|
+
/**
|
|
23
|
+
* Create a pino logger with consistent redaction, level, format, and
|
|
24
|
+
* destination across the entire codebase.
|
|
25
|
+
*
|
|
26
|
+
* - LOG_LEVEL (default "info") controls the minimum severity.
|
|
27
|
+
* - LOG_FORMAT=json disables pino-pretty and outputs newline-delimited JSON
|
|
28
|
+
* to stderr.
|
|
29
|
+
* - All loggers redact the same set of sensitive fields.
|
|
30
|
+
*/
|
|
31
|
+
export function createLogger(name) {
|
|
32
|
+
const isJson = process.env.LOG_FORMAT === "json";
|
|
33
|
+
return pino({
|
|
34
|
+
...(name && { name }),
|
|
35
|
+
level: process.env.LOG_LEVEL || "info",
|
|
36
|
+
redact: {
|
|
37
|
+
paths: REDACT_PATHS,
|
|
38
|
+
censor: "[REDACTED]",
|
|
39
|
+
},
|
|
40
|
+
...(!isJson && {
|
|
41
|
+
transport: {
|
|
42
|
+
target: "pino-pretty",
|
|
43
|
+
options: {
|
|
44
|
+
colorize: true,
|
|
45
|
+
levelFirst: true,
|
|
46
|
+
destination: 2,
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
}),
|
|
50
|
+
}, ...(isJson ? [pino.destination(2)] : []));
|
|
51
|
+
}
|
package/package.json
CHANGED