You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Add the public projects_write contract, routing, handler coverage, and generated documentation for shared field updates across batches of up to 50 items.
Co-authored-by: Lizeth Vera <47796851+veralizeth@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7ae767ff-c1d0-46a9-b126-2e91403993a0
Copy file name to clipboardExpand all lines: README.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1121,6 +1121,7 @@ The following sets of tools are available:
1121
1121
-`item_owner`: The owner (user or organization) of the repository containing the issue or pull request. Required for 'add_project_item' method. Also accepted by 'update_project_item' when resolving the item by issue number. (string, optional)
1122
1122
-`item_repo`: The name of the repository containing the issue or pull request. Required for 'add_project_item' method. Also accepted by 'update_project_item' when resolving the item by issue number. (string, optional)
1123
1123
-`item_type`: The item's type, either issue or pull_request. Required for 'add_project_item' method. (string, optional)
1124
+
-`items`: The items to update with the top-level 'updated_field'. Required for 'update_project_items'; prefer it over calling 'update_project_item' in a loop. Each entry must match exactly one reference variant: 'node_id', numeric 'item_id', or 'item_owner' + 'item_repo' + 'issue_number'. Limit: 50 items per call. (object[], optional)
1124
1125
-`iteration_duration`: Duration in days for iterations of the field (e.g. 7 for weekly, 14 for bi-weekly). Required for 'create_iteration_field' method. (number, optional)
1125
1126
-`iterations`: Custom iterations for 'create_iteration_field' method. Only set this when you need iterations with varying durations, breaks between them, or specific titles. Otherwise omit it: GitHub auto-creates three iterations of 'iteration_duration' days starting on 'start_date', which is the right choice for most cases. (object[], optional)
1126
1127
-`method`: The method to execute (string, required)
@@ -1132,7 +1133,7 @@ The following sets of tools are available:
1132
1133
-`status`: The status of the project. Used for 'create_project_status_update' method. (string, optional)
1133
1134
-`target_date`: The target date of the status update in YYYY-MM-DD format. Used for 'create_project_status_update' method. (string, optional)
1134
1135
-`title`: The project title. Required for 'create_project' method. (string, optional)
1135
-
-`updated_field`: Object describing the field to update and its new value. Required for 'update_project_item'. Two shapes are accepted: (1) by ID — {"id": 123456, "value": "..."}; (2) by name — {"name": "Status", "value": "In Progress"}. For single-select fields, option-name resolution requires the by-name shape; on the by-ID shape, pass the option ID. Set value to null to clear the field. (object, optional)
1136
+
-`updated_field`: The field/value to apply, using {"id": 123, "value": ...} or {"name": "Status", "value": ...}; null clears the field. Required for 'update_project_item' and 'update_project_items', where one top-level field/value applies to every item in a batch. For 'update_project_item' SINGLE_SELECT fields, the name form accepts option names; the ID form expects an option ID. (object, optional)
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/projects_write.snap
+97-2Lines changed: 97 additions & 2 deletions
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,7 @@
5
5
"readOnlyHint": false,
6
6
"title": "Manage GitHub Projects"
7
7
},
8
-
"description": "Create and manage GitHub Projects: create projects, add/update/delete items, create status updates, and add iteration fields.",
8
+
"description": "Create and manage GitHub Projects: create projects, add/update/delete items, bulk-update many items at once, create status updates, and add iteration fields.",
9
9
"inputSchema": {
10
10
"properties": {
11
11
"body": {
@@ -40,6 +40,64 @@
40
40
],
41
41
"type": "string"
42
42
},
43
+
"items": {
44
+
"description": "The items to update with the top-level 'updated_field'. Required for 'update_project_items'; prefer it over calling 'update_project_item' in a loop. Each entry must match exactly one reference variant: 'node_id', numeric 'item_id', or 'item_owner' + 'item_repo' + 'issue_number'. Limit: 50 items per call.",
45
+
"items": {
46
+
"oneOf": [
47
+
{
48
+
"additionalProperties": false,
49
+
"properties": {
50
+
"node_id": {
51
+
"description": "The project item's GraphQL node ID, as returned by 'list_project_items' or 'add_project_item'.",
52
+
"type": "string"
53
+
}
54
+
},
55
+
"required": [
56
+
"node_id"
57
+
],
58
+
"type": "object"
59
+
},
60
+
{
61
+
"additionalProperties": false,
62
+
"properties": {
63
+
"item_id": {
64
+
"description": "The numeric project item ID.",
65
+
"type": "integer"
66
+
}
67
+
},
68
+
"required": [
69
+
"item_id"
70
+
],
71
+
"type": "object"
72
+
},
73
+
{
74
+
"additionalProperties": false,
75
+
"properties": {
76
+
"issue_number": {
77
+
"description": "Issue number used to resolve the project item.",
78
+
"type": "integer"
79
+
},
80
+
"item_owner": {
81
+
"description": "Owner of the repository containing the issue.",
82
+
"type": "string"
83
+
},
84
+
"item_repo": {
85
+
"description": "Repository containing the issue.",
86
+
"type": "string"
87
+
}
88
+
},
89
+
"required": [
90
+
"item_owner",
91
+
"item_repo",
92
+
"issue_number"
93
+
],
94
+
"type": "object"
95
+
}
96
+
],
97
+
"type": "object"
98
+
},
99
+
"type": "array"
100
+
},
43
101
"iteration_duration": {
44
102
"description": "Duration in days for iterations of the field (e.g. 7 for weekly, 14 for bi-weekly). Required for 'create_iteration_field' method.",
45
103
"type": "number"
@@ -76,6 +134,7 @@
76
134
"enum": [
77
135
"add_project_item",
78
136
"update_project_item",
137
+
"update_project_items",
79
138
"delete_project_item",
80
139
"create_project_status_update",
81
140
"create_project",
@@ -127,7 +186,43 @@
127
186
"type": "string"
128
187
},
129
188
"updated_field": {
130
-
"description": "Object describing the field to update and its new value. Required for 'update_project_item'. Two shapes are accepted: (1) by ID — {\"id\": 123456, \"value\": \"...\"}; (2) by name — {\"name\": \"Status\", \"value\": \"In Progress\"}. For single-select fields, option-name resolution requires the by-name shape; on the by-ID shape, pass the option ID. Set value to null to clear the field.",
189
+
"description": "The field/value to apply, using {\"id\": 123, \"value\": ...} or {\"name\": \"Status\", \"value\": ...}; null clears the field. Required for 'update_project_item' and 'update_project_items', where one top-level field/value applies to every item in a batch. For 'update_project_item' SINGLE_SELECT fields, the name form accepts option names; the ID form expects an option ID.",
190
+
"oneOf": [
191
+
{
192
+
"additionalProperties": false,
193
+
"properties": {
194
+
"id": {
195
+
"description": "The numeric project field ID.",
196
+
"type": "integer"
197
+
},
198
+
"value": {
199
+
"description": "The value to apply. Any JSON value is accepted; use null to clear the field."
200
+
}
201
+
},
202
+
"required": [
203
+
"id",
204
+
"value"
205
+
],
206
+
"type": "object"
207
+
},
208
+
{
209
+
"additionalProperties": false,
210
+
"properties": {
211
+
"name": {
212
+
"description": "The project field name. Matching is case-insensitive.",
213
+
"type": "string"
214
+
},
215
+
"value": {
216
+
"description": "The value to apply. Any JSON value is accepted; use null to clear the field."
Description: "The field/value to apply, using {\"id\": 123, \"value\": ...} or {\"name\": \"Status\", \"value\": ...}; null clears the field. Required for 'update_project_item' and 'update_project_items', where one top-level field/value applies to every item in a batch. For 'update_project_item' SINGLE_SELECT fields, the name form accepts option names; the ID form expects an option ID.",
Description: t("TOOL_PROJECTS_WRITE_DESCRIPTION", "Create and manage GitHub Projects: create projects, add/update/delete items, create status updates, and add iteration fields."),
578
+
Description: t("TOOL_PROJECTS_WRITE_DESCRIPTION", "Create and manage GitHub Projects: create projects, add/update/delete items, bulk-update many items at once, create status updates, and add iteration fields."),
Description: "The pull request number (use when item_type is 'pull_request' for 'add_project_item' method). Provide either issue_number or pull_request_number.",
562
641
},
563
-
"updated_field": {
564
-
Type: "object",
565
-
Description: "Object describing the field to update and its new value. Required for 'update_project_item'. Two shapes are accepted: (1) by ID — {\"id\": 123456, \"value\": \"...\"}; (2) by name — {\"name\": \"Status\", \"value\": \"In Progress\"}. For single-select fields, option-name resolution requires the by-name shape; on the by-ID shape, pass the option ID. Set value to null to clear the field.",
642
+
"updated_field": projectUpdatedFieldSchema(),
643
+
"items": {
644
+
Type: "array",
645
+
Description: "The items to update with the top-level 'updated_field'. Required for 'update_project_items'; prefer it over calling 'update_project_item' in a loop. Each entry must match exactly one reference variant: 'node_id', numeric 'item_id', or 'item_owner' + 'item_repo' + 'issue_number'. Limit: "+strconv.Itoa(maxProjectItemsPerBatch) +" items per call.",
0 commit comments