@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.
@@ -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":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAgB,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE9E,mEAAmE;AACnE,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,MAAoB;IACxE,MAAM,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;IACvC,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC;IACpC,SAAS,QAAQ,CAAC,IAAY,EAAE,WAAmB,EAAE,MAAqB,EAAE,MAAiC,EAAE,IAAwB;QACrI,MAAM,CAAC,YAAY,CAAC,UAAU,IAAI,EAAE,EAAE;YACpC,WAAW,EAAE,GAAG,WAAW,sKAAsK;YACjM,WAAW,EAAE,MAAM;YACnB,WAAW,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE;SACxG,EAAE,KAAK,EAAE,IAAS,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;gBACpF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC/F,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACzF,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,YAAY,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,kCAAkC,EAAE,CAAC,EAAE,CAAC;YAC1J,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IACD,QAAQ,CAAC,eAAe,EAAE,iFAAiF,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;IACjN,QAAQ,CAAC,eAAe,EAAE,uCAAuC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,wBAAwB,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACnL,QAAQ,CAAC,eAAe,EAAE,yOAAyO,EAAE;QACnQ,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI;QAC3C,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE;YACxV,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACvB,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,SAAS;oBAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,OAAO,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC5J,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,CAAC,CAAC,aAAa;oBAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,eAAe,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;gBAC7I,IAAI,CAAC,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,gBAAgB,KAAK,SAAS;oBAAE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAC/J,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;KACH,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAChE,MAAM,QAAQ,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IACpS,QAAQ,CAAC,cAAc,EAAE,kBAAkB,EAAE,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5M,QAAQ,CAAC,cAAc,EAAE,2GAA2G,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACvV,QAAQ,CAAC,sBAAsB,EAAE,wDAAwD,EAAE,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,iBAAiB,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAC3X,QAAQ,CAAC,sBAAsB,EAAE,8EAA8E,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;IACvZ,QAAQ,CAAC,qBAAqB,EAAE,kFAAkF,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,2BAA2B,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,EAAE,oBAAoB,EAAE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;IACjV,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,eAAe,CAAU,EAAE,CAAC;QACvD,MAAM,IAAI,GAAG,CAAC,CAAM,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC;QAChH,QAAQ,CAAC,UAAU,IAAI,UAAU,EAAE,wBAAwB,IAAI,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAChI,QAAQ,CAAC,UAAU,IAAI,UAAU,EAAE,oBAAoB,IAAI,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7J,QAAQ,CAAC,UAAU,IAAI,UAAU,EAAE,sBAAsB,IAAI,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QACtJ,QAAQ,CAAC,SAAS,IAAI,aAAa,EAAE,wBAAwB,IAAI,cAAc,EAAE,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,gBAAgB,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5M,CAAC;IACD,QAAQ,CAAC,iCAAiC,EAAE,2IAA2I,EAAE,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAAE,yBAAyB,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC;IACvkB,QAAQ,CAAC,kCAAkC,EAAE,oCAAoC,EAAE,EAAE,GAAG,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,gBAAgB,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACvP,KAAK,MAAM,SAAS,IAAI,CAAC,SAAS,EAAE,WAAW,CAAU;QAAE,QAAQ,CAAC,GAAG,SAAS,gBAAgB,EAAE,GAAG,SAAS,mBAAmB,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC,CAAC;IACpR,QAAQ,CAAC,iBAAiB,EAAE,oCAAoC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IAC/Q,KAAK,MAAM,SAAS,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAU,EAAE,CAAC;QACrD,QAAQ,CAAC,GAAG,SAAS,WAAW,EAAE,GAAG,SAAS,cAAc,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,WAAW,IAAI,SAAS,EAAE,CAAC,CAAC;QAC9K,QAAQ,CAAC,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,YAAY,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;IAC1J,CAAC;IACD,QAAQ,CAAC,UAAU,EAAE,wBAAwB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC;AAC1I,CAAC"}
package/package.json CHANGED
@@ -1,22 +1,22 @@
1
- {
2
- "name": "@jswk1/gitlab-mcp",
3
- "version": "1.3.4",
4
- "type": "module",
5
- "description": "Read-only, 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
- }
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
+ }