@jswk1/gitlab-mcp 1.3.4 → 1.3.8
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.md +361 -326
- package/dist/gitlab.d.ts +1 -0
- package/dist/gitlab.js +14 -2
- package/dist/gitlab.js.map +1 -1
- package/dist/server.js +28 -9
- package/dist/server.js.map +1 -1
- package/dist/workflows.d.ts +15 -5
- package/dist/workflows.js +30 -9
- package/dist/workflows.js.map +1 -1
- package/dist/write-tools.d.ts +4 -0
- package/dist/write-tools.js +64 -0
- package/dist/write-tools.js.map +1 -0
- package/package.json +22 -22
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { GitLabError, projectPath, segment } from './gitlab.js';
|
|
3
|
+
/** Explicit endpoint allowlist: no arbitrary HTTP request tool. */
|
|
4
|
+
export function registerWriteTools(server, client) {
|
|
5
|
+
const id = z.number().int().positive();
|
|
6
|
+
const text = z.string().min(1).max(1000000);
|
|
7
|
+
const project = z.string().min(1).max(1024);
|
|
8
|
+
const shared = { project, iid: id };
|
|
9
|
+
function register(name, description, schema, method, path) {
|
|
10
|
+
server.registerTool(`gitlab_${name}`, {
|
|
11
|
+
description: `${description} Requires a write-capable token and sufficient GitLab permissions. Use only within the user's authorized scope. On ambiguous failures inspect state before retrying.`,
|
|
12
|
+
inputSchema: schema,
|
|
13
|
+
annotations: { readOnlyHint: false, destructiveHint: true, idempotentHint: false, openWorldHint: true },
|
|
14
|
+
}, async (args) => {
|
|
15
|
+
try {
|
|
16
|
+
const { project, iid, note_id, discussion_id, pipeline_id, job_id, ...body } = args;
|
|
17
|
+
const result = await client.mutate(path(args), method, method === 'DELETE' ? undefined : body);
|
|
18
|
+
return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
|
|
19
|
+
}
|
|
20
|
+
catch (error) {
|
|
21
|
+
return { isError: true, content: [{ type: 'text', text: error instanceof GitLabError ? error.message : 'Unable to process write request.' }] };
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
register('create_branch', 'Create an implementation branch from a verified branch or immutable commit SHA.', { project, branch: text, ref: text }, 'POST', a => `${projectPath(a.project)}/repository/branches`);
|
|
26
|
+
register('delete_branch', 'Delete a named branch when requested.', { project, branch: text }, 'DELETE', a => `${projectPath(a.project)}/repository/branches/${segment(a.branch)}`);
|
|
27
|
+
register('create_commit', 'Commit and persist multiple file changes directly to a remote branch. This API operation publishes the commit without a separate Git push. Prefer host Git for local implementation and testing. Never force overwrite concurrent work.', {
|
|
28
|
+
project, branch: text, commit_message: text,
|
|
29
|
+
actions: z.array(z.object({ action: z.enum(['create', 'update', 'delete', 'move', 'chmod']), file_path: text, previous_path: text.optional(), content: z.string().optional(), encoding: z.enum(['text', 'base64']).optional(), last_commit_id: text.optional(), execute_filemode: z.boolean().optional() })).min(1).max(100).superRefine((actions, ctx) => {
|
|
30
|
+
actions.forEach((a, i) => {
|
|
31
|
+
if (['create', 'update'].includes(a.action) && a.content === undefined)
|
|
32
|
+
ctx.addIssue({ code: 'custom', path: [i, 'content'], message: 'Content required' });
|
|
33
|
+
if (a.action === 'move' && !a.previous_path)
|
|
34
|
+
ctx.addIssue({ code: 'custom', path: [i, 'previous_path'], message: 'Previous path required' });
|
|
35
|
+
if (a.action === 'chmod' && a.execute_filemode === undefined)
|
|
36
|
+
ctx.addIssue({ code: 'custom', path: [i, 'execute_filemode'], message: 'File mode required' });
|
|
37
|
+
});
|
|
38
|
+
}),
|
|
39
|
+
}, 'POST', a => `${projectPath(a.project)}/repository/commits`);
|
|
40
|
+
const metadata = { title: text.optional(), description: z.string().max(1000000).optional(), add_labels: z.string().optional(), remove_labels: z.string().optional(), labels: z.string().optional(), assignee_ids: z.array(id).optional(), milestone_id: z.number().int().nonnegative().optional() };
|
|
41
|
+
register('create_issue', 'Create an issue.', { project, ...metadata, title: text, confidential: z.boolean().optional(), due_date: z.string().optional() }, 'POST', a => `${projectPath(a.project)}/issues`);
|
|
42
|
+
register('update_issue', 'Update issue metadata, labels, assignment or close/reopen an issue. Empty labels/assignee_ids clear them.', { ...shared, ...metadata, state_event: z.enum(['close', 'reopen']).optional(), confidential: z.boolean().optional(), due_date: z.string().optional() }, 'PUT', a => `${projectPath(a.project)}/issues/${a.iid}`);
|
|
43
|
+
register('create_merge_request', 'Create a merge request from an existing source branch.', { project, ...metadata, title: text, source_branch: text, target_branch: text, target_project_id: id.optional(), reviewer_ids: z.array(id).optional(), remove_source_branch: z.boolean().optional(), squash: z.boolean().optional() }, 'POST', a => `${projectPath(a.project)}/merge_requests`);
|
|
44
|
+
register('update_merge_request', 'Update a merge request, reviewers, labels, target branch or close/reopen it.', { ...shared, ...metadata, reviewer_ids: z.array(id).optional(), target_branch: text.optional(), state_event: z.enum(['close', 'reopen']).optional(), squash: z.boolean().optional(), remove_source_branch: z.boolean().optional() }, 'PUT', a => `${projectPath(a.project)}/merge_requests/${a.iid}`);
|
|
45
|
+
register('merge_merge_request', 'Merge a merge request with an expected source SHA to guard against changed code.', { ...shared, sha: text, squash: z.boolean().optional(), should_remove_source_branch: z.boolean().optional(), merge_commit_message: text.optional() }, 'PUT', a => `${projectPath(a.project)}/merge_requests/${a.iid}/merge`);
|
|
46
|
+
for (const kind of ['issue', 'merge_request']) {
|
|
47
|
+
const base = (a) => `${projectPath(a.project)}/${kind === 'issue' ? 'issues' : 'merge_requests'}/${a.iid}`;
|
|
48
|
+
register(`create_${kind}_comment`, `Post a comment on an ${kind}.`, { ...shared, body: text }, 'POST', a => `${base(a)}/notes`);
|
|
49
|
+
register(`update_${kind}_comment`, `Edit an existing ${kind} comment.`, { ...shared, note_id: id, body: text }, 'PUT', a => `${base(a)}/notes/${a.note_id}`);
|
|
50
|
+
register(`delete_${kind}_comment`, `Delete an existing ${kind} comment.`, { ...shared, note_id: id }, 'DELETE', a => `${base(a)}/notes/${a.note_id}`);
|
|
51
|
+
register(`reply_${kind}_discussion`, `Reply to an existing ${kind} discussion.`, { ...shared, discussion_id: text, body: text }, 'POST', a => `${base(a)}/discussions/${segment(a.discussion_id)}/notes`);
|
|
52
|
+
}
|
|
53
|
+
register('create_merge_request_discussion', 'Post a review thread, optionally on a diff. Use current diff_refs and verified old/new line positions from gitlab_prepare_review_comment.', { ...shared, body: text, position: z.object({ position_type: z.literal('text'), base_sha: text, start_sha: text, head_sha: text, old_path: text, new_path: text, old_line: id.optional(), new_line: id.optional() }).refine(p => p.old_line !== undefined || p.new_line !== undefined, 'A diff line is required').optional() }, 'POST', a => `${projectPath(a.project)}/merge_requests/${a.iid}/discussions`);
|
|
54
|
+
register('resolve_merge_request_discussion', 'Resolve or reopen a review thread.', { ...shared, discussion_id: text, resolved: z.boolean() }, 'PUT', a => `${projectPath(a.project)}/merge_requests/${a.iid}/discussions/${segment(a.discussion_id)}`);
|
|
55
|
+
for (const operation of ['approve', 'unapprove'])
|
|
56
|
+
register(`${operation}_merge_request`, `${operation} a merge request.`, { ...shared, ...(operation === 'approve' ? { sha: text } : {}) }, 'POST', a => `${projectPath(a.project)}/merge_requests/${a.iid}/${operation}`);
|
|
57
|
+
register('create_pipeline', 'Run a pipeline on an existing ref.', { project, ref: text, variables: z.array(z.object({ key: text, value: z.string(), variable_type: z.enum(['env_var', 'file']).optional() })).optional() }, 'POST', a => `${projectPath(a.project)}/pipeline`);
|
|
58
|
+
for (const operation of ['retry', 'cancel']) {
|
|
59
|
+
register(`${operation}_pipeline`, `${operation} a pipeline.`, { project, pipeline_id: id }, 'POST', a => `${projectPath(a.project)}/pipelines/${a.pipeline_id}/${operation}`);
|
|
60
|
+
register(`${operation}_job`, `${operation} a CI job.`, { project, job_id: id }, 'POST', a => `${projectPath(a.project)}/jobs/${a.job_id}/${operation}`);
|
|
61
|
+
}
|
|
62
|
+
register('play_job', 'Start a manual CI job.', { project, job_id: id }, 'POST', a => `${projectPath(a.project)}/jobs/${a.job_id}/play`);
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=write-tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-tools.js","sourceRoot":"","sources":["../src/write-tools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@jswk1/gitlab-mcp",
|
|
3
|
-
"version": "1.3.
|
|
4
|
-
"type": "module",
|
|
5
|
-
"description": "
|
|
6
|
-
"license": "MIT",
|
|
7
|
-
"keywords": ["mcp", "gitlab", "model-context-protocol"],
|
|
8
|
-
"engines": { "node": ">=20.20" },
|
|
9
|
-
"bin": { "gitlab-mcp": "dist/index.js" },
|
|
10
|
-
"files": ["dist"],
|
|
11
|
-
"scripts": {
|
|
12
|
-
"build": "tsc -p tsconfig.json",
|
|
13
|
-
"prepack": "npm run build",
|
|
14
|
-
"docker:build": "docker build -t gitlab-readonly-mcp .",
|
|
15
|
-
"start": "node dist/index.js",
|
|
16
|
-
"dev": "tsx src/index.ts",
|
|
17
|
-
"test": "tsx --test test/*.test.ts",
|
|
18
|
-
"check": "tsc --noEmit"
|
|
19
|
-
},
|
|
20
|
-
"dependencies": { "@modelcontextprotocol/sdk": "^1.27.1", "sharp": "^0.35.5", "zod": "^3.25.76" },
|
|
21
|
-
"devDependencies": { "@types/node": "^22.19.0", "tsx": "^4.20.0", "typescript": "^5.9.3" }
|
|
22
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@jswk1/gitlab-mcp",
|
|
3
|
+
"version": "1.3.8",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Per-user GitLab MCP server for developer assistants",
|
|
6
|
+
"license": "MIT",
|
|
7
|
+
"keywords": ["mcp", "gitlab", "model-context-protocol"],
|
|
8
|
+
"engines": { "node": ">=20.20" },
|
|
9
|
+
"bin": { "gitlab-mcp": "dist/index.js" },
|
|
10
|
+
"files": ["dist"],
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc -p tsconfig.json",
|
|
13
|
+
"prepack": "npm run build",
|
|
14
|
+
"docker:build": "docker build -t gitlab-readonly-mcp .",
|
|
15
|
+
"start": "node dist/index.js",
|
|
16
|
+
"dev": "tsx src/index.ts",
|
|
17
|
+
"test": "tsx --test test/*.test.ts",
|
|
18
|
+
"check": "tsc --noEmit"
|
|
19
|
+
},
|
|
20
|
+
"dependencies": { "@modelcontextprotocol/sdk": "^1.27.1", "sharp": "^0.35.5", "zod": "^3.25.76" },
|
|
21
|
+
"devDependencies": { "@types/node": "^22.19.0", "tsx": "^4.20.0", "typescript": "^5.9.3" }
|
|
22
|
+
}
|