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
MCP: name-based resolution for Projects fields (#2760)
* Let agents address Project fields, single-select options, and item field values by name through the GitHub MCP server
* Adding a method to resolve params resolveItemIDFromIssueArgs
* Adding the DatabaseID to be able to match the graphQL
* Changing the parsing to strconv.ParseInt
* Changing description.
* update readme
* Fixing copilot comments
* Adding Case-insensitive matching and fields + field_names guard
* running snaps and readme
-`field_id`: The field's ID. Required for 'get_project_field' method. (number, optional)
1072
-
-`fields`: Specific list of field IDs to include in the response when getting a project item (e.g. ["102589", "985201", "169875"]). If not provided, only the title field is included. Only used for 'get_project_item' method. (string[], optional)
1072
+
-`field_names`: Specific list of field names to include in the response when getting a project item (e.g. ["Status", "Priority"]). Resolved server-side to field IDs — pass this instead of 'fields' when you only know the human-readable names. Mutually exclusive with 'fields' — provide one, not both. Only used for 'get_project_item' method. (string[], optional)
1073
+
-`fields`: Specific list of field IDs to include in the response when getting a project item (e.g. ["102589", "985201", "169875"]). If neither 'fields' nor 'field_names' is provided, only the title field is included. Mutually exclusive with 'field_names' — provide one, not both. Only used for 'get_project_item' method. (string[], optional)
1073
1074
-`item_id`: The item's ID. Required for 'get_project_item' method. (number, optional)
1074
1075
-`method`: The method to execute (string, required)
1075
1076
-`owner`: The owner (user or organization login). The name is not case sensitive. (string, optional)
@@ -1082,7 +1083,8 @@ The following sets of tools are available:
-`after`: Forward pagination cursor from previous pageInfo.nextCursor. (string, optional)
1084
1085
-`before`: Backward pagination cursor from previous pageInfo.prevCursor (rare). (string, optional)
1085
-
-`fields`: Field IDs to include when listing project items (e.g. ["102589", "985201"]). CRITICAL: Always provide to get field values. Without this, only titles returned. Only used for 'list_project_items' method. (string[], optional)
1086
+
-`field_names`: Field names to include when listing project items (e.g. ["Status", "Priority"]). Resolved server-side to field IDs — pass this instead of 'fields' when you only know the human-readable names. Names that fail to resolve return a structured error. Mutually exclusive with 'fields' — provide one, not both. Only used for 'list_project_items' method. (string[], optional)
1087
+
-`fields`: Field IDs to include when listing project items (e.g. ["102589", "985201"]). CRITICAL: Always provide to get field values. Without this (and without 'field_names'), only titles returned. Mutually exclusive with 'field_names' — provide one, not both. Only used for 'list_project_items' method. (string[], optional)
1086
1088
-`method`: The action to perform (string, required)
1087
1089
-`owner`: The owner (user or organization login). The name is not case sensitive. (string, required)
1088
1090
-`owner_type`: Owner type (user or org). If not provided, will automatically try both. (string, optional)
@@ -1094,10 +1096,10 @@ The following sets of tools are available:
1094
1096
-**Required OAuth Scopes**: `project`
1095
1097
-`body`: The body of the status update (markdown). Used for 'create_project_status_update' method. (string, optional)
1096
1098
-`field_name`: The name of the iteration field (e.g. 'Sprint'). Required for 'create_iteration_field' method. (string, optional)
1097
-
-`issue_number`: The issue number (use when item_type is 'issue' for 'add_project_item' method). Provide either issue_number or pull_request_number. (number, optional)
1098
-
-`item_id`: The project item ID. Required for 'update_project_item' and 'delete_project_item' methods. (number, optional)
1099
-
-`item_owner`: The owner (user or organization) of the repository containing the issue or pull request. Required for 'add_project_item' method. (string, optional)
1100
-
-`item_repo`: The name of the repository containing the issue or pull request. Required for 'add_project_item' method. (string, optional)
1099
+
-`issue_number`: The issue number. Required for 'add_project_item' when item_type is 'issue'. Also accepted by 'update_project_item' to resolve the item by issue number (combine with item_owner and item_repo). (number, optional)
1100
+
-`item_id`: The project item ID. Required for 'delete_project_item'. For 'update_project_item', provide either item_id, or (item_owner + item_repo + issue_number) to resolve the item by issue. (number, optional)
1101
+
-`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)
1102
+
-`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)
1101
1103
-`item_type`: The item's type, either issue or pull_request. Required for 'add_project_item' method. (string, optional)
1102
1104
-`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)
1103
1105
-`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)
@@ -1110,7 +1112,7 @@ The following sets of tools are available:
1110
1112
-`status`: The status of the project. Used for 'create_project_status_update' method. (string, optional)
1111
1113
-`target_date`: The target date of the status update in YYYY-MM-DD format. Used for 'create_project_status_update' method. (string, optional)
1112
1114
-`title`: The project title. Required for 'create_project' method. (string, optional)
1113
-
-`updated_field`: Object consisting of the ID of the project field to update and the new valuefor the field. To clear the field, set value to null. Example: {"id": 123456, "value": "New Value"}. Required for 'update_project_item' method. (object, optional)
1115
+
-`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)
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/projects_get.snap
+8-1Lines changed: 8 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -11,8 +11,15 @@
11
11
"description": "The field's ID. Required for 'get_project_field' method.",
12
12
"type": "number"
13
13
},
14
+
"field_names": {
15
+
"description": "Specific list of field names to include in the response when getting a project item (e.g. [\"Status\", \"Priority\"]). Resolved server-side to field IDs — pass this instead of 'fields' when you only know the human-readable names. Mutually exclusive with 'fields' — provide one, not both. Only used for 'get_project_item' method.",
16
+
"items": {
17
+
"type": "string"
18
+
},
19
+
"type": "array"
20
+
},
14
21
"fields": {
15
-
"description": "Specific list of field IDs to include in the response when getting a project item (e.g. [\"102589\", \"985201\", \"169875\"]). If not provided, only the title field is included. Only used for 'get_project_item' method.",
22
+
"description": "Specific list of field IDs to include in the response when getting a project item (e.g. [\"102589\", \"985201\", \"169875\"]). If neither 'fields' nor 'field_names' is provided, only the title field is included. Mutually exclusive with 'field_names' — provide one, not both. Only used for 'get_project_item' method.",
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/projects_list.snap
+8-1Lines changed: 8 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -15,8 +15,15 @@
15
15
"description": "Backward pagination cursor from previous pageInfo.prevCursor (rare).",
16
16
"type": "string"
17
17
},
18
+
"field_names": {
19
+
"description": "Field names to include when listing project items (e.g. [\"Status\", \"Priority\"]). Resolved server-side to field IDs — pass this instead of 'fields' when you only know the human-readable names. Names that fail to resolve return a structured error. Mutually exclusive with 'fields' — provide one, not both. Only used for 'list_project_items' method.",
20
+
"items": {
21
+
"type": "string"
22
+
},
23
+
"type": "array"
24
+
},
18
25
"fields": {
19
-
"description": "Field IDs to include when listing project items (e.g. [\"102589\", \"985201\"]). CRITICAL: Always provide to get field values. Without this, only titles returned. Only used for 'list_project_items' method.",
26
+
"description": "Field IDs to include when listing project items (e.g. [\"102589\", \"985201\"]). CRITICAL: Always provide to get field values. Without this (and without 'field_names'), only titles returned. Mutually exclusive with 'field_names' — provide one, not both. Only used for 'list_project_items' method.",
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/projects_write.snap
+5-5Lines changed: 5 additions & 5 deletions
Original file line number
Diff line number
Diff line change
@@ -17,19 +17,19 @@
17
17
"type": "string"
18
18
},
19
19
"issue_number": {
20
-
"description": "The issue number (use when item_type is 'issue' for 'add_project_item' method). Provide either issue_number or pull_request_number.",
20
+
"description": "The issue number. Required for 'add_project_item' when item_type is 'issue'. Also accepted by 'update_project_item' to resolve the item by issue number (combine with item_owner and item_repo).",
21
21
"type": "number"
22
22
},
23
23
"item_id": {
24
-
"description": "The project item ID. Required for 'update_project_item' and 'delete_project_item' methods.",
24
+
"description": "The project item ID. Required for 'delete_project_item'. For 'update_project_item', provide either item_id, or (item_owner + item_repo + issue_number) to resolve the item by issue.",
25
25
"type": "number"
26
26
},
27
27
"item_owner": {
28
-
"description": "The owner (user or organization) of the repository containing the issue or pull request. Required for 'add_project_item' method.",
28
+
"description": "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.",
29
29
"type": "string"
30
30
},
31
31
"item_repo": {
32
-
"description": "The name of the repository containing the issue or pull request. Required for 'add_project_item' method.",
32
+
"description": "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.",
33
33
"type": "string"
34
34
},
35
35
"item_type": {
@@ -127,7 +127,7 @@
127
127
"type": "string"
128
128
},
129
129
"updated_field": {
130
-
"description": "Object consisting of the ID of the project field to update and the new valuefor the field. To clear the field, set value to null. Example: {\"id\": 123456, \"value\": \"New Value\"}. Required for 'update_project_item' method.",
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.",
0 commit comments