feat: support resolving merge request notes
This commit is contained in:
13
index.ts
13
index.ts
@ -1027,7 +1027,7 @@ async function updateMergeRequestNote(
|
|||||||
mergeRequestIid: number,
|
mergeRequestIid: number,
|
||||||
discussionId: string,
|
discussionId: string,
|
||||||
noteId: number,
|
noteId: number,
|
||||||
body: string,
|
body?: string,
|
||||||
resolved?: boolean
|
resolved?: boolean
|
||||||
): Promise<GitLabDiscussionNote> {
|
): Promise<GitLabDiscussionNote> {
|
||||||
projectId = decodeURIComponent(projectId); // Decode project ID
|
projectId = decodeURIComponent(projectId); // Decode project ID
|
||||||
@ -1037,8 +1037,11 @@ async function updateMergeRequestNote(
|
|||||||
)}/merge_requests/${mergeRequestIid}/discussions/${discussionId}/notes/${noteId}`
|
)}/merge_requests/${mergeRequestIid}/discussions/${discussionId}/notes/${noteId}`
|
||||||
);
|
);
|
||||||
|
|
||||||
const payload: { body: string; resolved?: boolean } = { body };
|
// Only one of body or resolved can be sent according to GitLab API
|
||||||
if (resolved !== undefined) {
|
const payload: { body?: string; resolved?: boolean } = {};
|
||||||
|
if (body !== undefined) {
|
||||||
|
payload.body = body;
|
||||||
|
} else if (resolved !== undefined) {
|
||||||
payload.resolved = resolved;
|
payload.resolved = resolved;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2270,8 +2273,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|||||||
args.merge_request_iid,
|
args.merge_request_iid,
|
||||||
args.discussion_id,
|
args.discussion_id,
|
||||||
args.note_id,
|
args.note_id,
|
||||||
args.body,
|
args.body, // Now optional
|
||||||
args.resolved // Pass resolved if provided
|
args.resolved // Now one of body or resolved must be provided, not both
|
||||||
);
|
);
|
||||||
return {
|
return {
|
||||||
content: [{ type: "text", text: JSON.stringify(note, null, 2) }],
|
content: [{ type: "text", text: JSON.stringify(note, null, 2) }],
|
||||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "@zereight/mcp-gitlab",
|
"name": "@zereight/mcp-gitlab",
|
||||||
"version": "1.0.33",
|
"version": "1.0.36",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "@zereight/mcp-gitlab",
|
"name": "@zereight/mcp-gitlab",
|
||||||
"version": "1.0.33",
|
"version": "1.0.36",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@modelcontextprotocol/sdk": "1.8.0",
|
"@modelcontextprotocol/sdk": "1.8.0",
|
||||||
|
@ -475,8 +475,12 @@ export const UpdateMergeRequestNoteSchema = ProjectParamsSchema.extend({
|
|||||||
merge_request_iid: z.number().describe("The IID of a merge request"),
|
merge_request_iid: z.number().describe("The IID of a merge request"),
|
||||||
discussion_id: z.string().describe("The ID of a thread"),
|
discussion_id: z.string().describe("The ID of a thread"),
|
||||||
note_id: z.number().describe("The ID of a thread note"),
|
note_id: z.number().describe("The ID of a thread note"),
|
||||||
body: z.string().describe("The content of the note or reply"),
|
body: z.string().optional().describe("The content of the note or reply"),
|
||||||
resolved: z.boolean().optional().describe("Resolve or unresolve the note"), // Optional based on API docs
|
resolved: z.boolean().optional().describe("Resolve or unresolve the note"),
|
||||||
|
}).refine(data => data.body !== undefined || data.resolved !== undefined, {
|
||||||
|
message: "At least one of 'body' or 'resolved' must be provided"
|
||||||
|
}).refine(data => !(data.body !== undefined && data.resolved !== undefined), {
|
||||||
|
message: "Only one of 'body' or 'resolved' can be provided, not both"
|
||||||
});
|
});
|
||||||
|
|
||||||
// API Operation Parameter Schemas
|
// API Operation Parameter Schemas
|
||||||
|
Reference in New Issue
Block a user