@@ -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+
23502374async 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 ;
0 commit comments