@zereight/mcp-gitlab 2.1.70 → 2.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.
- package/README.ko.md +3 -1
- package/README.md +6 -2
- package/README.pt-BR.md +1 -1
- package/README.zh-CN.md +3 -1
- package/build/config.js +12 -4
- package/build/deprecated-env.js +47 -0
- package/build/index.js +369 -184
- package/build/oauth-device-flow.js +80 -0
- package/build/oauth.js +135 -18
- package/build/schemas.js +1 -1
- package/build/server/remote-http-stack.js +39 -0
- package/build/tools/discover-activation.js +38 -0
- package/build/tools/exposed-tools.js +35 -0
- package/build/tools/listed-tools.js +76 -0
- package/build/tools/registry.js +226 -57
- package/build/tools/tool-profile.js +66 -0
- package/build/utils/compact-tool-allowlist.js +14 -0
- package/build/utils/logger.js +34 -12
- package/package.json +3 -3
- package/build/scripts/check-skill-sync.js +0 -143
- package/build/scripts/generate-server-card.js +0 -39
- package/build/scripts/generate-tool-coverage.js +0 -58
- package/build/scripts/generate-tool-docs.js +0 -430
- package/build/scripts/tool-coverage/coverage.js +0 -341
- package/build/scripts/tool-coverage/coverage.test.js +0 -142
- package/build/test/callback-proxy-tests.js +0 -321
- package/build/test/cli/args.test.js +0 -175
- package/build/test/cli/boolean-flags.test.js +0 -106
- package/build/test/cli/compact-mcp-result.test.js +0 -93
- package/build/test/cli/credentials.test.js +0 -153
- package/build/test/cli/exposure.test.js +0 -104
- package/build/test/cli/load-config-snapshot.js +0 -5
- package/build/test/cli/output.test.js +0 -74
- package/build/test/cli/replay-command.test.js +0 -37
- package/build/test/cli/router.test.js +0 -183
- package/build/test/client-pool-test.js +0 -109
- package/build/test/clients/client.js +0 -34
- package/build/test/clients/custom-header-client.js +0 -122
- package/build/test/clients/sse-client.js +0 -95
- package/build/test/clients/stdio-client.js +0 -113
- package/build/test/clients/streamable-http-client.js +0 -95
- package/build/test/config-allowed-groups.test.js +0 -97
- package/build/test/create-commit-actions.test.js +0 -102
- package/build/test/draft-note-schema.test.js +0 -44
- package/build/test/dynamic-api-url-allowlist.test.js +0 -121
- package/build/test/dynamic-api-url-test.js +0 -304
- package/build/test/dynamic-routing-tests.js +0 -495
- package/build/test/get-merge-request-discussion-schema.test.js +0 -30
- package/build/test/gitlab-api-tool-errors.test.js +0 -112
- package/build/test/gitlab-artifact-entry-schema.test.js +0 -44
- package/build/test/gitlab-diff-schema.test.js +0 -36
- package/build/test/gitlab-pipeline-schedule-schema.test.js +0 -32
- package/build/test/gitlab-tag-schema.test.js +0 -51
- package/build/test/group-milestone-schema.test.js +0 -45
- package/build/test/mcp-oauth-tests.js +0 -905
- package/build/test/mcp-server-name.test.js +0 -87
- package/build/test/merge-merge-request-schema.test.js +0 -75
- package/build/test/multi-server-test.js +0 -190
- package/build/test/no-proxy-integration-test.js +0 -183
- package/build/test/no-proxy-test.js +0 -149
- package/build/test/nullable-gitlab-response-fields.test.js +0 -37
- package/build/test/nullish-tool-arguments-schema.test.js +0 -118
- package/build/test/oauth-device-flow-tests.js +0 -450
- package/build/test/oauth-download-url.test.js +0 -157
- package/build/test/oauth-startup.test.js +0 -204
- package/build/test/oauth-tests.js +0 -428
- package/build/test/path-segment-encoding.test.js +0 -98
- package/build/test/remote-auth-simple-test.js +0 -277
- package/build/test/remote-auth-tests.js +0 -314
- package/build/test/response-masking.test.js +0 -445
- package/build/test/schema-tests.js +0 -1679
- package/build/test/server/metrics.test.js +0 -47
- package/build/test/server/request-helpers.test.js +0 -48
- package/build/test/server/version.test.js +0 -13
- package/build/test/sse-auth-guard.test.js +0 -96
- package/build/test/sse-session-limits.test.js +0 -273
- package/build/test/stateless/callback-proxy.test.js +0 -510
- package/build/test/stateless/client-id.test.js +0 -177
- package/build/test/stateless/codec.test.js +0 -328
- package/build/test/stateless/config-ttl.test.js +0 -149
- package/build/test/stateless/consumed-proxy-code-cache.test.js +0 -150
- package/build/test/stateless/session-id-integration.test.js +0 -675
- package/build/test/stateless/session-id.test.js +0 -157
- package/build/test/streamable-http-concurrent-session.test.js +0 -171
- package/build/test/streamable-http-dns-rebinding.test.js +0 -185
- package/build/test/streamable-http-sse-stream.test.js +0 -350
- package/build/test/streamable-http-static-token-auth.test.js +0 -157
- package/build/test/streamable-http-unauthenticated-discovery.test.js +0 -207
- package/build/test/test-all-transport-server.js +0 -255
- package/build/test/test-auth-retry.js +0 -195
- package/build/test/test-blank-filters.js +0 -156
- package/build/test/test-ci-catalog.js +0 -177
- package/build/test/test-ci-lint.js +0 -191
- package/build/test/test-ci-variables.js +0 -309
- package/build/test/test-create-repository.js +0 -120
- package/build/test/test-dependency-proxy.js +0 -195
- package/build/test/test-deployment-tools.js +0 -463
- package/build/test/test-download-attachment.js +0 -190
- package/build/test/test-dynamic-project-scope.js +0 -524
- package/build/test/test-empty-toolsets.js +0 -535
- package/build/test/test-get-file-blame.js +0 -145
- package/build/test/test-get-file-contents.js +0 -128
- package/build/test/test-geteffectiveprojectid.js +0 -804
- package/build/test/test-health-check.js +0 -115
- package/build/test/test-issue-description-patch.js +0 -256
- package/build/test/test-job-artifacts.js +0 -275
- package/build/test/test-json-schema.js +0 -166
- package/build/test/test-list-group-members.js +0 -150
- package/build/test/test-list-group-merge-requests.js +0 -165
- package/build/test/test-list-issues.js +0 -170
- package/build/test/test-list-merge-requests.js +0 -201
- package/build/test/test-list-milestones.js +0 -145
- package/build/test/test-list-project-members.js +0 -132
- package/build/test/test-merge-request-approval-state-tools.js +0 -213
- package/build/test/test-merge-request-approvals.js +0 -187
- package/build/test/test-merge-request-pipelines.js +0 -106
- package/build/test/test-mr-diffs-filter.js +0 -132
- package/build/test/test-mr-file-diffs.js +0 -251
- package/build/test/test-oauth-proxy-rate-limit.js +0 -133
- package/build/test/test-orbit.js +0 -155
- package/build/test/test-permission-mode.js +0 -424
- package/build/test/test-pipeline-schedules.js +0 -484
- package/build/test/test-protected-branches.js +0 -174
- package/build/test/test-remote-downloads.js +0 -510
- package/build/test/test-search-code.js +0 -275
- package/build/test/test-snippets.js +0 -735
- package/build/test/test-tags.js +0 -220
- package/build/test/test-todos.js +0 -195
- package/build/test/test-token-optimizations.js +0 -691
- package/build/test/test-toolset-filtering.js +0 -499
- package/build/test/test-update-issue-slim.js +0 -141
- package/build/test/test-update-project.js +0 -112
- package/build/test/test-upload-markdown.js +0 -206
- package/build/test/test-vulnerabilities.js +0 -399
- package/build/test/test-webhooks.js +0 -218
- package/build/test/tool-description-quality.test.js +0 -50
- package/build/test/utils/bulk-publish-options.test.js +0 -32
- package/build/test/utils/download-token.test.js +0 -35
- package/build/test/utils/forwarded-public-base-url.test.js +0 -46
- package/build/test/utils/gitlab-instance-version.test.js +0 -32
- package/build/test/utils/gitlab-version-gate.test.js +0 -74
- package/build/test/utils/graphql-query.test.js +0 -168
- package/build/test/utils/helpers-path.test.js +0 -104
- package/build/test/utils/jmespath-tool-result.test.js +0 -91
- package/build/test/utils/masking.test.js +0 -384
- package/build/test/utils/merge-request-position.test.js +0 -57
- package/build/test/utils/mock-gitlab-server.js +0 -614
- package/build/test/utils/proxy-client-ip.test.js +0 -28
- package/build/test/utils/redact-sensitive.test.js +0 -32
- package/build/test/utils/safe-redirect-fetch.test.js +0 -463
- package/build/test/utils/server-launcher.js +0 -231
- package/build/test/utils/tool-args.test.js +0 -210
- package/build/test/utils/url.test.js +0 -141
- package/build/test/utils/version-check.test.js +0 -239
- package/build/test/utils/wiki-title.test.js +0 -21
- package/build/test-note.js +0 -54
- package/build/test-resolve-issue-note.js +0 -127
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { test } from "node:test";
|
|
3
|
-
import { GitLabDiffSchema } from "../schemas.js";
|
|
4
|
-
test("diff schema keeps GitLab's generated_file, too_large and collapsed flags", () => {
|
|
5
|
-
const parsed = GitLabDiffSchema.parse({
|
|
6
|
-
diff: "@@ -1 +1 @@",
|
|
7
|
-
new_path: "src/Foo.php",
|
|
8
|
-
old_path: "src/Foo.php",
|
|
9
|
-
a_mode: "100644",
|
|
10
|
-
b_mode: "100644",
|
|
11
|
-
new_file: false,
|
|
12
|
-
renamed_file: false,
|
|
13
|
-
deleted_file: false,
|
|
14
|
-
generated_file: true,
|
|
15
|
-
too_large: true,
|
|
16
|
-
collapsed: false,
|
|
17
|
-
});
|
|
18
|
-
assert.equal(parsed.generated_file, true);
|
|
19
|
-
assert.equal(parsed.too_large, true);
|
|
20
|
-
assert.equal(parsed.collapsed, false);
|
|
21
|
-
});
|
|
22
|
-
test("diff schema still parses entries without the optional flags", () => {
|
|
23
|
-
const parsed = GitLabDiffSchema.parse({
|
|
24
|
-
diff: "@@ -1 +1 @@",
|
|
25
|
-
new_path: "src/Foo.php",
|
|
26
|
-
old_path: "src/Foo.php",
|
|
27
|
-
a_mode: "100644",
|
|
28
|
-
b_mode: "100644",
|
|
29
|
-
new_file: false,
|
|
30
|
-
renamed_file: false,
|
|
31
|
-
deleted_file: false,
|
|
32
|
-
});
|
|
33
|
-
assert.equal("generated_file" in parsed, false);
|
|
34
|
-
assert.equal("too_large" in parsed, false);
|
|
35
|
-
assert.equal("collapsed" in parsed, false);
|
|
36
|
-
});
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { test } from "node:test";
|
|
3
|
-
import { GitLabPipelineScheduleSchema } from "../schemas.js";
|
|
4
|
-
const BASE_SCHEDULE = {
|
|
5
|
-
id: 13,
|
|
6
|
-
description: "Nightly build",
|
|
7
|
-
cron: "0 1 * * *",
|
|
8
|
-
active: true,
|
|
9
|
-
created_at: "2026-01-01T00:00:00Z",
|
|
10
|
-
updated_at: "2026-02-01T00:00:00Z",
|
|
11
|
-
};
|
|
12
|
-
test("pipeline schedule response accepts inputs without value", () => {
|
|
13
|
-
// Zod 4 rejects a missing key on required unknown (Zod 3 accepted it);
|
|
14
|
-
// schedule inputs must tolerate a valueless entry.
|
|
15
|
-
const parsed = GitLabPipelineScheduleSchema.parse({
|
|
16
|
-
...BASE_SCHEDULE,
|
|
17
|
-
inputs: [{ name: "deploy_strategy" }],
|
|
18
|
-
});
|
|
19
|
-
assert.equal(parsed.inputs?.[0].name, "deploy_strategy");
|
|
20
|
-
assert.equal("value" in (parsed.inputs?.[0] ?? {}), false);
|
|
21
|
-
});
|
|
22
|
-
test("pipeline schedule response keeps inputs with value", () => {
|
|
23
|
-
const parsed = GitLabPipelineScheduleSchema.parse({
|
|
24
|
-
...BASE_SCHEDULE,
|
|
25
|
-
inputs: [
|
|
26
|
-
{ name: "deploy_strategy", value: "blue-green" },
|
|
27
|
-
{ name: "matrix", value: { os: "linux" } },
|
|
28
|
-
],
|
|
29
|
-
});
|
|
30
|
-
assert.equal(parsed.inputs?.[0].value, "blue-green");
|
|
31
|
-
assert.deepEqual(parsed.inputs?.[1].value, { os: "linux" });
|
|
32
|
-
});
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import { describe, it } from "node:test";
|
|
2
|
-
import assert from "node:assert";
|
|
3
|
-
import { GitLabTagSchema } from "../schemas.js";
|
|
4
|
-
function validTag(overrides = {}) {
|
|
5
|
-
return {
|
|
6
|
-
name: "v1.0.0",
|
|
7
|
-
message: "tag message",
|
|
8
|
-
target: "abc123def456",
|
|
9
|
-
commit: {
|
|
10
|
-
id: "abc123def456",
|
|
11
|
-
short_id: "abc123de",
|
|
12
|
-
title: "Release",
|
|
13
|
-
created_at: "2026-03-13T10:00:00.000Z",
|
|
14
|
-
parent_ids: ["1111111111111111"],
|
|
15
|
-
message: "Release",
|
|
16
|
-
author_name: "Test User",
|
|
17
|
-
author_email: "test@example.com",
|
|
18
|
-
authored_date: "2026-03-13T09:55:00.000Z",
|
|
19
|
-
committer_name: "Test User",
|
|
20
|
-
committer_email: "test@example.com",
|
|
21
|
-
committed_date: "2026-03-13T10:00:00.000Z",
|
|
22
|
-
},
|
|
23
|
-
protected: false,
|
|
24
|
-
created_at: "2026-03-13T10:00:00.000Z",
|
|
25
|
-
...overrides,
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
describe("When parsing a GitLab tag response", () => {
|
|
29
|
-
describe("with a missing release key", () => {
|
|
30
|
-
it("should accept the tag instead of requiring release", () => {
|
|
31
|
-
const parsed = GitLabTagSchema.parse(validTag());
|
|
32
|
-
assert.strictEqual(parsed.name, "v1.0.0");
|
|
33
|
-
assert.strictEqual(parsed.release, undefined);
|
|
34
|
-
});
|
|
35
|
-
});
|
|
36
|
-
describe("with release set to null", () => {
|
|
37
|
-
it("should accept a null release", () => {
|
|
38
|
-
const parsed = GitLabTagSchema.parse(validTag({ release: null }));
|
|
39
|
-
assert.strictEqual(parsed.release, null);
|
|
40
|
-
});
|
|
41
|
-
});
|
|
42
|
-
describe("with a release object", () => {
|
|
43
|
-
it("should keep tag_name and description", () => {
|
|
44
|
-
const parsed = GitLabTagSchema.parse(validTag({
|
|
45
|
-
release: { tag_name: "v1.0.0", description: "notes" },
|
|
46
|
-
}));
|
|
47
|
-
assert.strictEqual(parsed.release?.tag_name, "v1.0.0");
|
|
48
|
-
assert.strictEqual(parsed.release?.description, "notes");
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
});
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import assert from "node:assert/strict";
|
|
2
|
-
import { test } from "node:test";
|
|
3
|
-
import { GitLabGroupMilestonesSchema, GitLabMilestonesSchema, GetGroupMilestoneIssuesSchema, } from "../schemas.js";
|
|
4
|
-
test("group milestone response keeps group_id and rejects missing group_id", () => {
|
|
5
|
-
const parsed = GitLabGroupMilestonesSchema.parse({
|
|
6
|
-
id: 12,
|
|
7
|
-
iid: 3,
|
|
8
|
-
group_id: 16,
|
|
9
|
-
title: "10.0",
|
|
10
|
-
description: null,
|
|
11
|
-
due_date: null,
|
|
12
|
-
start_date: null,
|
|
13
|
-
state: "active",
|
|
14
|
-
updated_at: "2013-10-02T09:24:18Z",
|
|
15
|
-
created_at: "2013-10-02T09:24:18Z",
|
|
16
|
-
expired: false,
|
|
17
|
-
});
|
|
18
|
-
assert.equal(parsed.group_id, "16");
|
|
19
|
-
assert.equal("project_id" in parsed, false);
|
|
20
|
-
// Project schema rejects a group payload (missing project_id) — why group schema exists.
|
|
21
|
-
// (Zod 3 coerced the missing key to the string "undefined"; Zod 4 rejects it.)
|
|
22
|
-
assert.throws(() => GitLabMilestonesSchema.parse({
|
|
23
|
-
id: 12,
|
|
24
|
-
iid: 3,
|
|
25
|
-
group_id: 16,
|
|
26
|
-
title: "10.0",
|
|
27
|
-
description: null,
|
|
28
|
-
due_date: null,
|
|
29
|
-
start_date: null,
|
|
30
|
-
state: "active",
|
|
31
|
-
updated_at: "2013-10-02T09:24:18Z",
|
|
32
|
-
created_at: "2013-10-02T09:24:18Z",
|
|
33
|
-
expired: false,
|
|
34
|
-
}));
|
|
35
|
-
});
|
|
36
|
-
test("group milestone issues schema accepts page and per_page", () => {
|
|
37
|
-
const parsed = GetGroupMilestoneIssuesSchema.parse({
|
|
38
|
-
group_id: "16",
|
|
39
|
-
milestone_id: "12",
|
|
40
|
-
page: 2,
|
|
41
|
-
per_page: 50,
|
|
42
|
-
});
|
|
43
|
-
assert.equal(parsed.page, 2);
|
|
44
|
-
assert.equal(parsed.per_page, 50);
|
|
45
|
-
});
|