@@ -256,30 +256,19 @@ func ListProjectFields(getClient GetClientFn, t translations.TranslationHelperFu
256256return mcp .NewToolResultError (err .Error ()),nil
257257}
258258
259+ var resp * github.Response
260+ var projectFields []* github.ProjectV2Field
261+
259262opts := & github.ListProjectsOptions {
260263ListProjectsPaginationOptions :pagination ,
261264}
262265
263- var url string
264266if ownerType == "org" {
265- url = fmt . Sprintf ( "orgs/%s/projectsV2/%d/fields" ,owner ,projectNumber )
267+ projectFields , resp , err = client . Projects . ListOrganizationProjectFields ( ctx ,owner ,projectNumber , opts )
266268}else {
267- url = fmt .Sprintf ("users/%s/projectsV2/%d/fields" ,owner ,projectNumber )
268- }
269-
270- url ,err = addOptions (url ,opts )
271- if err != nil {
272- return mcp .NewToolResultError (err .Error ()),nil
269+ projectFields ,resp ,err = client .Projects .ListUserProjectFields (ctx ,owner ,projectNumber ,opts )
273270}
274271
275- httpRequest ,err := client .NewRequest ("GET" ,url ,nil )
276- if err != nil {
277- return nil ,fmt .Errorf ("failed to create request: %w" ,err )
278- }
279-
280- var projectFields []projectV2Field
281- resp ,err := client .Do (ctx ,httpRequest ,& projectFields )
282-
283272if err != nil {
284273return ghErrors .NewGitHubAPIErrorResponse (ctx ,
285274"failed to list project fields" ,
@@ -452,7 +441,7 @@ func ListProjectItems(getClient GetClientFn, t translations.TranslationHelperFun
452441}
453442
454443var resp * github.Response
455- var projectItems []projectV2Item
444+ var projectItems []* github. ProjectV2Item
456445var queryPtr * string
457446
458447if queryStr != "" {
@@ -467,25 +456,12 @@ func ListProjectItems(getClient GetClientFn, t translations.TranslationHelperFun
467456},
468457}
469458
470- var url string
471459if ownerType == "org" {
472- url = fmt . Sprintf ( "orgs/%s/projectsV2/%d/items" ,owner ,projectNumber )
460+ projectItems , resp , err = client . Projects . ListOrganizationProjectItems ( ctx ,owner ,projectNumber , opts )
473461}else {
474- url = fmt . Sprintf ( "users/%s/projectsV2/%d/items" ,owner ,projectNumber )
462+ projectItems , resp , err = client . Projects . ListUserProjectItems ( ctx ,owner ,projectNumber , opts )
475463}
476464
477- url ,err = addOptions (url ,opts )
478- if err != nil {
479- return mcp .NewToolResultError (err .Error ()),nil
480- }
481-
482- httpRequest ,err := client .NewRequest ("GET" ,url ,nil )
483- if err != nil {
484- return nil ,fmt .Errorf ("failed to create request: %w" ,err )
485- }
486-
487- resp ,err = client .Do (ctx ,httpRequest ,& projectItems )
488-
489465if err != nil {
490466return ghErrors .NewGitHubAPIErrorResponse (ctx ,
491467ProjectListFailedError ,
@@ -566,32 +542,22 @@ func GetProjectItem(getClient GetClientFn, t translations.TranslationHelperFunc)
566542return mcp .NewToolResultError (err .Error ()),nil
567543}
568544
569- var url string
570- if ownerType == "org" {
571- url = fmt .Sprintf ("orgs/%s/projectsV2/%d/items/%d" ,owner ,projectNumber ,itemID )
572- }else {
573- url = fmt .Sprintf ("users/%s/projectsV2/%d/items/%d" ,owner ,projectNumber ,itemID )
574- }
575-
576- opts := fieldSelectionOptions {}
545+ resp := & github.Response {}
546+ projectItem := & github.ProjectV2Item {}
547+ var opts * github.GetProjectItemOptions
577548
578549if len (fields )> 0 {
579- opts .Fields = fields
580- }
581-
582- url ,err = addOptions (url ,opts )
583- if err != nil {
584- return mcp .NewToolResultError (err .Error ()),nil
550+ opts = & github.GetProjectItemOptions {
551+ Fields :fields ,
552+ }
585553}
586554
587- projectItem := projectV2Item {}
588-
589- httpRequest ,err := client .NewRequest ("GET" ,url ,nil )
590- if err != nil {
591- return nil ,fmt .Errorf ("failed to create request: %w" ,err )
555+ if ownerType == "org" {
556+ projectItem ,resp ,err = client .Projects .GetOrganizationProjectItem (ctx ,owner ,projectNumber ,itemID ,opts )
557+ }else {
558+ projectItem ,resp ,err = client .Projects .GetUserProjectItem (ctx ,owner ,projectNumber ,itemID ,opts )
592559}
593560
594- resp ,err := client .Do (ctx ,httpRequest ,& projectItem )
595561if err != nil {
596562return ghErrors .NewGitHubAPIErrorResponse (ctx ,
597563"failed to get project item" ,
@@ -748,7 +714,7 @@ func UpdateProjectItem(getClient GetClientFn, t translations.TranslationHelperFu
748714if err != nil {
749715return mcp .NewToolResultError (err .Error ()),nil
750716}
751- itemID ,err := RequiredInt (req ,"item_id" )
717+ itemID ,err := RequiredBigInt (req ,"item_id" )
752718if err != nil {
753719return mcp .NewToolResultError (err .Error ()),nil
754720}
@@ -773,21 +739,15 @@ func UpdateProjectItem(getClient GetClientFn, t translations.TranslationHelperFu
773739return mcp .NewToolResultError (err .Error ()),nil
774740}
775741
776- var projectsURL string
742+ var resp * github.Response
743+ var updatedItem * github.ProjectV2Item
744+
777745if ownerType == "org" {
778- projectsURL = fmt . Sprintf ( "orgs/%s/projectsV2/%d/items/%d" ,owner ,projectNumber ,itemID )
746+ updatedItem , resp , err = client . Projects . UpdateOrganizationProjectItem ( ctx ,owner ,projectNumber ,itemID , updatePayload )
779747}else {
780- projectsURL = fmt .Sprintf ("users/%s/projectsV2/%d/items/%d" ,owner ,projectNumber ,itemID )
781- }
782- httpRequest ,err := client .NewRequest ("PATCH" ,projectsURL ,updateProjectItemPayload {
783- Fields : []updateProjectItem {* updatePayload },
784- })
785- if err != nil {
786- return nil ,fmt .Errorf ("failed to create request: %w" ,err )
748+ updatedItem ,resp ,err = client .Projects .UpdateUserProjectItem (ctx ,owner ,projectNumber ,itemID ,updatePayload )
787749}
788- updatedItem := projectV2Item {}
789750
790- resp ,err := client .Do (ctx ,httpRequest ,& updatedItem )
791751if err != nil {
792752return ghErrors .NewGitHubAPIErrorResponse (ctx ,
793753ProjectUpdateFailedError ,
@@ -892,15 +852,6 @@ type fieldSelectionOptions struct {
892852Fields []int64 `url:"fields,omitempty,comma"`
893853}
894854
895- type updateProjectItemPayload struct {
896- Fields []updateProjectItem `json:"fields"`
897- }
898-
899- type updateProjectItem struct {
900- ID int `json:"id"`
901- Value any `json:"value"`
902- }
903-
904855type projectV2ItemFieldValue struct {
905856ID * int64 `json:"id,omitempty"`
906857Name string `json:"name,omitempty"`
@@ -967,7 +918,7 @@ func toNewProjectType(projType string) string {
967918}
968919}
969920
970- func buildUpdateProjectItem (input map [string ]any ) (* updateProjectItem ,error ) {
921+ func buildUpdateProjectItem (input map [string ]any ) (* github. UpdateProjectItemOptions ,error ) {
971922if input == nil {
972923return nil ,fmt .Errorf ("updated_field must be an object" )
973924}
@@ -986,7 +937,12 @@ func buildUpdateProjectItem(input map[string]any) (*updateProjectItem, error) {
986937if ! ok {
987938return nil ,fmt .Errorf ("updated_field.value is required" )
988939}
989- payload := & updateProjectItem {ID :int (idFieldAsFloat64 ),Value :valueField }
940+ payload := & github.UpdateProjectItemOptions {
941+ Fields : []* github.UpdateProjectV2Field {{
942+ ID :int64 (idFieldAsFloat64 ),
943+ Value :valueField ,
944+ }},
945+ }
990946
991947return payload ,nil
992948}