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
Copy file name to clipboardExpand all lines: README.md
+60-6Lines changed: 60 additions & 6 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -830,24 +830,78 @@ Options are:
830
830
-`project_number`: The project's number. (number, required)
831
831
832
832
-**list_project_fields** - List project fields
833
+
-`after`: Forward pagination cursor. Use when the previous response's pageInfo.hasNextPage=true. Supply pageInfo.nextCursor as 'after' and immediately request the next page. LOOP UNTIL pageInfo.hasNextPage=false (don't stop early). Keep per_page identical for every page. (string, optional)
834
+
-`before`: Backward pagination cursor (rare): supply to move to the preceding page using pageInfo.prevCursor. Not needed for normal forward iteration. (string, optional)
833
835
-`owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
834
836
-`owner_type`: Owner type (string, required)
835
-
-`per_page`: Number of results per page (max 100, default: 30) (number, optional)
837
+
-`per_page`: Results per page (max 50). Keep constant across paginated requests; changing mid-sequence can complicate page traversal. (number, optional)
836
838
-`project_number`: The project's number. (number, required)
837
839
838
840
-**list_project_items** - List project items
839
-
-`fields`: Specific list of field IDs to include in the response (e.g. ["102589", "985201", "169875"]). If not provided, only the title field is included. (string[], optional)
841
+
-`after`: Forward pagination cursor. Use when the previous response's pageInfo.hasNextPage=true. Supply pageInfo.nextCursor as 'after' and immediately request the next page. LOOP UNTIL pageInfo.hasNextPage=false (don't stop early). Keep query, fields, and per_page identical for every page. (string, optional)
842
+
-`before`: Backward pagination cursor (rare): supply to move to the preceding page using pageInfo.prevCursor. Not needed for normal forward iteration. (string, optional)
843
+
-`fields`: Field IDs to include (e.g. ["102589", "985201"]). CRITICAL: Always provide to get field values. Without this, only titles returned. Get IDs from list_project_fields first. (string[], optional)
840
844
-`owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
841
845
-`owner_type`: Owner type (string, required)
842
-
-`per_page`: Number of results per page (max 100, default: 30) (number, optional)
846
+
-`per_page`: Results per page (max 50). Keep constant across paginated requests; changing mid-sequence can complicate page traversal. (number, optional)
843
847
-`project_number`: The project's number. (number, required)
844
-
-`query`: Search query to filter items (string, optional)
848
+
-`query`: Query string - For advanced filtering of project items using GitHub's search syntax:
849
+
850
+
MUST reflect user intent; strongly prefer explicit content type if narrowed:
851
+
- "open issues" → state:open is:issue
852
+
- "merged PRs" → state:merged is:pr
853
+
- "items updated this week" → updated:>@today-7d (omit type only if mixed desired)
854
+
- "list all P1 priority items" → priority:p1 (omit state if user wants all, omit type if user specifies "items")
855
+
- "list all open P2 issues" → is:issue state:open priority:p2 (include state if user wants open or closed, include type if user specifies "issues" or "PRs")
856
+
- "all open issues I'm working on" → is:issue state:open assignee:@me
857
+
858
+
Query Construction Heuristics:
859
+
a. Extract type nouns: issues → is:issue | PRs, Pulls, or Pull Requests → is:pr | tasks/tickets → is:issue (ask if ambiguity)
860
+
b. Map temporal phrases: "this week" → updated:>@today-7d
861
+
c. Map negations: "excluding wontfix" → -label:wontfix
862
+
d. Map priority adjectives: "high/sev1/p1" → priority:high OR priority:p1 (choose based on field presence)
863
+
e. When filtering by label, always use wildcard matching to account for cross-repository differences or emojis: (e.g. "bug 🐛" → label:*bug*)
864
+
f. When filtering by milestone, always use wildcard matching to account for cross-repository differences: (e.g. "v1.0" → milestone:*v1.0*)
865
+
866
+
Syntax Essentials (items):
867
+
AND: space-separated. (label:bug priority:high).
868
+
OR: comma inside one qualifier (label:bug,critical).
869
+
NOT: leading '-' (-label:wontfix).
870
+
Hyphenate multi-word field names. (team-name:"Backend Team", story-points:>5).
Do not analyze until ALL pages fetched (loop while pageInfo.hasNextPage=true). Always reuse identical query, fields, per_page.
883
+
884
+
Recovery Guidance:
885
+
If user provides ambiguous request ("show project activity") → ask clarification OR return mixed set (omit is:issue/is:pr). If user mixes project + item qualifiers in one phrase → split: run list_projects for discovery, then list_project_items for detail.
886
+
887
+
Never:
888
+
- Infer field IDs; fetch via list_project_fields.
889
+
- Drop 'fields' param on subsequent pages if field values are needed. (string, optional)
845
890
846
891
-**list_projects** - List projects
892
+
-`after`: Forward pagination cursor. Use when the previous response's pageInfo.hasNextPage=true. Supply pageInfo.nextCursor as 'after' and immediately request the next page. LOOP UNTIL pageInfo.hasNextPage=false (don't stop early). Keep query and per_page identical for every page. (string, optional)
893
+
-`before`: Backward pagination cursor (rare): supply to move to the preceding page using pageInfo.prevCursor. Not needed for normal forward iteration. (string, optional)
847
894
-`owner`: If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive. (string, required)
848
895
-`owner_type`: Owner type (string, required)
849
-
-`per_page`: Number of results per page (max 100, default: 30) (number, optional)
850
-
-`query`: Filter projects by a search query (matches title and description) (string, optional)
896
+
-`per_page`: Results per page (max 50). Keep constant across paginated requests; changing mid-sequence can complicate page traversal. (number, optional)
897
+
-`query`: Filter projects by a search query
898
+
899
+
Scope: title text + open/closed state.
900
+
PERMITTED qualifiers: is:open, is:closed (state), simple title terms.
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/list_project_fields.snap
+9-1Lines changed: 9 additions & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -6,6 +6,14 @@
6
6
"description": "List Project fields for a user or org",
7
7
"inputSchema": {
8
8
"properties": {
9
+
"after": {
10
+
"description": "Forward pagination cursor. Use when the previous response's pageInfo.hasNextPage=true. Supply pageInfo.nextCursor as 'after' and immediately request the next page. LOOP UNTIL pageInfo.hasNextPage=false (don't stop early). Keep per_page identical for every page.",
11
+
"type": "string"
12
+
},
13
+
"before": {
14
+
"description": "Backward pagination cursor (rare): supply to move to the preceding page using pageInfo.prevCursor. Not needed for normal forward iteration.",
15
+
"type": "string"
16
+
},
9
17
"owner": {
10
18
"description": "If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive.",
11
19
"type": "string"
@@ -19,7 +27,7 @@
19
27
"type": "string"
20
28
},
21
29
"per_page": {
22
-
"description": "Number of results per page (max 100, default: 30)",
30
+
"description": "Results per page (max 50). Keep constant across paginated requests; changing mid-sequence can complicate page traversal.",
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/list_project_items.snap
+12-4Lines changed: 12 additions & 4 deletions
Original file line number
Diff line number
Diff line change
@@ -3,11 +3,19 @@
3
3
"title": "List project items",
4
4
"readOnlyHint": true
5
5
},
6
-
"description": "List Project items for a user or org",
6
+
"description": "Search project items with advanced filtering",
7
7
"inputSchema": {
8
8
"properties": {
9
+
"after": {
10
+
"description": "Forward pagination cursor. Use when the previous response's pageInfo.hasNextPage=true. Supply pageInfo.nextCursor as 'after' and immediately request the next page. LOOP UNTIL pageInfo.hasNextPage=false (don't stop early). Keep query, fields, and per_page identical for every page.",
11
+
"type": "string"
12
+
},
13
+
"before": {
14
+
"description": "Backward pagination cursor (rare): supply to move to the preceding page using pageInfo.prevCursor. Not needed for normal forward iteration.",
15
+
"type": "string"
16
+
},
9
17
"fields": {
10
-
"description": "Specific list of field IDs to include in the response (e.g. [\"102589\", \"985201\", \"169875\"]). If not provided, only the title field is included.",
18
+
"description": "Field IDs to include (e.g. [\"102589\", \"985201\"]). CRITICAL: Always provide to get field values. Without this, only titles returned. Get IDs from list_project_fields first.",
11
19
"items": {
12
20
"type": "string"
13
21
},
@@ -26,15 +34,15 @@
26
34
"type": "string"
27
35
},
28
36
"per_page": {
29
-
"description": "Number of results per page (max 100, default: 30)",
37
+
"description": "Results per page (max 50). Keep constant across paginated requests; changing mid-sequence can complicate page traversal.",
30
38
"type": "number"
31
39
},
32
40
"project_number": {
33
41
"description": "The project's number.",
34
42
"type": "number"
35
43
},
36
44
"query": {
37
-
"description": "Search query to filter items",
45
+
"description": "Query string - For advanced filtering of project items using GitHub's search syntax:\n\nMUST reflect user intent; strongly prefer explicit content type if narrowed:\n\t- \"open issues\" → state:open is:issue\n\t- \"merged PRs\" → state:merged is:pr\n\t- \"items updated this week\" → updated:\u003e@today-7d (omit type only if mixed desired)\n\t- \"list all P1 priority items\" → priority:p1 (omit state if user wants all, omit type if user specifies \"items\")\n\t- \"list all open P2 issues\" → is:issue state:open priority:p2 (include state if user wants open or closed, include type if user specifies \"issues\" or \"PRs\")\n\t- \"all open issues I'm working on\" → is:issue state:open assignee:@me\n\nQuery Construction Heuristics:\n\ta. Extract type nouns: issues → is:issue | PRs, Pulls, or Pull Requests → is:pr | tasks/tickets → is:issue (ask if ambiguity)\n\tb. Map temporal phrases: \"this week\" → updated:\u003e@today-7d\n\tc. Map negations: \"excluding wontfix\" → -label:wontfix\n\td. Map priority adjectives: \"high/sev1/p1\" → priority:high OR priority:p1 (choose based on field presence)\n\te. When filtering by label, always use wildcard matching to account for cross-repository differences or emojis: (e.g. \"bug 🐛\" → label:*bug*)\n\tf. When filtering by milestone, always use wildcard matching to account for cross-repository differences: (e.g. \"v1.0\" → milestone:*v1.0*)\n\nSyntax Essentials (items):\n AND: space-separated. (label:bug priority:high).\n OR: comma inside one qualifier (label:bug,critical).\n NOT: leading '-' (-label:wontfix).\n Hyphenate multi-word field names. (team-name:\"Backend Team\", story-points:\u003e5).\n Quote multi-word values. (status:\"In Review\" team-name:\"Backend Team\").\n Ranges: points:1..3, updated:\u003c@today-30d.\n Wildcards: title:*crash*, label:bug*.\n\t Assigned to User: assignee:@me | assignee:username | no:assignee\n\nCommon Qualifier Glossary (items):\n is:issue | is:pr | state:open|closed|merged | assignee:@me|username | label:NAME | status:VALUE |\n priority:p1|high | sprint-name:@current | team-name:\"Backend Team\" | parent-issue:\"org/repo#123\" |\n updated:\u003e@today-7d | title:*text* | -label:wontfix | label:bug,critical | no:assignee | has:label\n\nPagination Mandate:\n Do not analyze until ALL pages fetched (loop while pageInfo.hasNextPage=true). Always reuse identical query, fields, per_page.\n\nRecovery Guidance:\n If user provides ambiguous request (\"show project activity\") → ask clarification OR return mixed set (omit is:issue/is:pr). If user mixes project + item qualifiers in one phrase → split: run list_projects for discovery, then list_project_items for detail.\n\nNever:\n - Infer field IDs; fetch via list_project_fields.\n - Drop 'fields' param on subsequent pages if field values are needed.",
Copy file name to clipboardExpand all lines: pkg/github/__toolsnaps__/list_projects.snap
+11-3Lines changed: 11 additions & 3 deletions
Original file line number
Diff line number
Diff line change
@@ -3,9 +3,17 @@
3
3
"title": "List projects",
4
4
"readOnlyHint": true
5
5
},
6
-
"description": "List Projects for a user or org",
6
+
"description": "List Projects for a user or organization",
7
7
"inputSchema": {
8
8
"properties": {
9
+
"after": {
10
+
"description": "Forward pagination cursor. Use when the previous response's pageInfo.hasNextPage=true. Supply pageInfo.nextCursor as 'after' and immediately request the next page. LOOP UNTIL pageInfo.hasNextPage=false (don't stop early). Keep query and per_page identical for every page.",
11
+
"type": "string"
12
+
},
13
+
"before": {
14
+
"description": "Backward pagination cursor (rare): supply to move to the preceding page using pageInfo.prevCursor. Not needed for normal forward iteration.",
15
+
"type": "string"
16
+
},
9
17
"owner": {
10
18
"description": "If owner_type == user it is the handle for the GitHub user account. If owner_type == org it is the name of the organization. The name is not case sensitive.",
11
19
"type": "string"
@@ -19,11 +27,11 @@
19
27
"type": "string"
20
28
},
21
29
"per_page": {
22
-
"description": "Number of results per page (max 100, default: 30)",
30
+
"description": "Results per page (max 50). Keep constant across paginated requests; changing mid-sequence can complicate page traversal.",
23
31
"type": "number"
24
32
},
25
33
"query": {
26
-
"description": "Filter projects by a search query (matches title and description)",
34
+
"description": "Filter projects by a search query\n\t\t\t\t\nScope: title text + open/closed state.\nPERMITTED qualifiers: is:open, is:closed (state), simple title terms.\nFORBIDDEN: is:issue, is:pr, assignee:, label:, status:, sprint-name:, parent-issue:, team-name:, priority:, etc.\nExamples:\n\t- roadmap is:open\n\t- is:open feature planning",
0 commit comments