Skip to content

Commit f58c1ec

Browse files
Merge pull request #197 from zereight/feat/195-1
FEAT: get draft note
2 parents 449de4d + fee12e9 commit f58c1ec

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

index.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ import {
5858
GetBranchDiffsSchema,
5959
GetCommitDiffSchema,
6060
GetCommitSchema,
61+
GetDraftNoteSchema,
6162
GetFileContentsSchema,
6263
GetIssueLinkSchema,
6364
GetIssueSchema,
@@ -497,6 +498,11 @@ const allTools = [
497498
description: "Add a new note to an existing merge request thread",
498499
inputSchema: zodToJsonSchema(CreateMergeRequestNoteSchema),
499500
},
501+
{
502+
name: "get_draft_note",
503+
description: "Get a single draft note from a merge request",
504+
inputSchema: zodToJsonSchema(GetDraftNoteSchema),
505+
},
500506
{
501507
name: "list_draft_notes",
502508
description: "List draft notes for a merge request",
@@ -2347,6 +2353,24 @@ async function createNote(
23472353
* @param {number|string} mergeRequestIid - The internal ID of the merge request
23482354
* @returns {Promise<GitLabDraftNote[]>} Array of draft notes
23492355
*/
2356+
async function getDraftNote(
2357+
project_id: string,
2358+
merge_request_iid: string,
2359+
draft_note_id: string
2360+
): Promise<GitLabDraftNote> {
2361+
const response = await fetch(
2362+
`/projects/${encodeURIComponent(project_id)}/merge_requests/${merge_request_iid}/draft_notes/${draft_note_id}`
2363+
);
2364+
2365+
if (!response.ok) {
2366+
const errorText = await response.text();
2367+
throw new Error(`GitLab API error: ${response.status} ${response.statusText}\n${errorText}`);
2368+
}
2369+
2370+
const data = await response.json();
2371+
return GitLabDraftNoteSchema.parse(data);
2372+
}
2373+
23502374
async function listDraftNotes(
23512375
projectId: string,
23522376
mergeRequestIid: number | string
@@ -4631,6 +4655,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
46314655
};
46324656
}
46334657

4658+
case "get_draft_note": {
4659+
const args = GetDraftNoteSchema.parse(request.params.arguments);
4660+
const { project_id, merge_request_iid, draft_note_id } = args;
4661+
4662+
const draftNote = await getDraftNote(project_id, merge_request_iid, draft_note_id);
4663+
return {
4664+
content: [{ type: "text", text: JSON.stringify(draftNote, null, 2) }],
4665+
};
4666+
}
4667+
46344668
case "list_draft_notes": {
46354669
const args = ListDraftNotesSchema.parse(request.params.arguments);
46364670
const { project_id, merge_request_iid } = args;

schemas.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1603,6 +1603,12 @@ export const GitLabDraftNoteSchema = z.object({
16031603

16041604
export type GitLabDraftNote = z.infer<typeof GitLabDraftNoteSchema>;
16051605

1606+
// Get draft note schema
1607+
export const GetDraftNoteSchema = ProjectParamsSchema.extend({
1608+
merge_request_iid: z.coerce.string().describe("The IID of a merge request"),
1609+
draft_note_id: z.coerce.string().describe("The ID of the draft note"),
1610+
});
1611+
16061612
// List draft notes schema
16071613
export const ListDraftNotesSchema = ProjectParamsSchema.extend({
16081614
merge_request_iid: z.coerce.string().describe("The IID of a merge request"),

0 commit comments

Comments
 (0)