quickcall-integrations 0.3.7__py3-none-any.whl → 0.3.8__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -582,8 +582,16 @@ class GitHubClient:
582
582
  # Issue Operations
583
583
  # ========================================================================
584
584
 
585
- def _issue_to_dict(self, issue) -> Dict[str, Any]:
585
+ def _issue_to_dict(self, issue, summary: bool = False) -> Dict[str, Any]:
586
586
  """Convert PyGithub Issue to dict."""
587
+ if summary:
588
+ return {
589
+ "number": issue.number,
590
+ "title": issue.title,
591
+ "state": issue.state,
592
+ "labels": [label.name for label in issue.labels],
593
+ "html_url": issue.html_url,
594
+ }
587
595
  return {
588
596
  "number": issue.number,
589
597
  "title": issue.title,
@@ -595,6 +603,70 @@ class GitHubClient:
595
603
  "created_at": issue.created_at.isoformat(),
596
604
  }
597
605
 
606
+ def list_issues(
607
+ self,
608
+ owner: Optional[str] = None,
609
+ repo: Optional[str] = None,
610
+ state: str = "open",
611
+ labels: Optional[List[str]] = None,
612
+ assignee: Optional[str] = None,
613
+ creator: Optional[str] = None,
614
+ milestone: Optional[str] = None,
615
+ sort: str = "updated",
616
+ limit: int = 30,
617
+ ) -> List[Dict[str, Any]]:
618
+ """
619
+ List issues in a repository.
620
+
621
+ Args:
622
+ owner: Repository owner
623
+ repo: Repository name
624
+ state: Issue state: 'open', 'closed', or 'all'
625
+ labels: Filter by labels
626
+ assignee: Filter by assignee username
627
+ creator: Filter by issue creator username
628
+ milestone: Filter by milestone (number, title, or '*' for any, 'none' for no milestone)
629
+ sort: Sort by 'created', 'updated', or 'comments'
630
+ limit: Maximum issues to return
631
+
632
+ Returns:
633
+ List of issue summaries
634
+ """
635
+ gh_repo = self._get_repo(owner, repo)
636
+
637
+ kwargs = {"state": state, "sort": sort, "direction": "desc"}
638
+ if labels:
639
+ kwargs["labels"] = labels
640
+ if assignee:
641
+ kwargs["assignee"] = assignee
642
+ if creator:
643
+ kwargs["creator"] = creator
644
+ if milestone:
645
+ # Handle milestone - can be number, '*', 'none', or title
646
+ if milestone == "*" or milestone == "none":
647
+ kwargs["milestone"] = milestone
648
+ elif milestone.isdigit():
649
+ kwargs["milestone"] = gh_repo.get_milestone(int(milestone))
650
+ else:
651
+ # Search by title
652
+ for ms in gh_repo.get_milestones(state="all"):
653
+ if ms.title.lower() == milestone.lower():
654
+ kwargs["milestone"] = ms
655
+ break
656
+
657
+ issues = []
658
+ count = 0
659
+ for issue in gh_repo.get_issues(**kwargs):
660
+ # Skip pull requests (GitHub API returns PRs in issues endpoint)
661
+ if issue.pull_request is not None:
662
+ continue
663
+ issues.append(self._issue_to_dict(issue, summary=True))
664
+ count += 1
665
+ if count >= limit:
666
+ break
667
+
668
+ return issues
669
+
598
670
  def create_issue(
599
671
  self,
600
672
  title: str,
@@ -570,7 +570,7 @@ def create_github_tools(mcp: FastMCP) -> None:
570
570
  def manage_issues(
571
571
  action: str = Field(
572
572
  ...,
573
- description="Action: 'view', 'create', 'update', 'close', 'reopen', 'comment', "
573
+ description="Action: 'list', 'view', 'create', 'update', 'close', 'reopen', 'comment', "
574
574
  "'add_sub_issue', 'remove_sub_issue', 'list_sub_issues'",
575
575
  ),
576
576
  issue_numbers: Optional[List[int]] = Field(
@@ -610,13 +610,35 @@ def create_github_tools(mcp: FastMCP) -> None:
610
610
  default=None,
611
611
  description="Repository name. Required.",
612
612
  ),
613
+ state: Optional[str] = Field(
614
+ default="open",
615
+ description="Issue state filter for 'list': 'open', 'closed', or 'all' (default: 'open')",
616
+ ),
617
+ creator: Optional[str] = Field(
618
+ default=None,
619
+ description="Filter by issue creator username (for 'list')",
620
+ ),
621
+ milestone: Optional[str] = Field(
622
+ default=None,
623
+ description="Filter by milestone: number, title, '*' (any), or 'none' (for 'list')",
624
+ ),
625
+ sort: Optional[str] = Field(
626
+ default="updated",
627
+ description="Sort by: 'created', 'updated', or 'comments' (for 'list', default: 'updated')",
628
+ ),
629
+ limit: Optional[int] = Field(
630
+ default=30,
631
+ description="Maximum issues to return for 'list' action (default: 30)",
632
+ ),
613
633
  ) -> dict:
614
634
  """
615
- Manage GitHub issues: view, create, update, close, reopen, comment, and sub-issues.
635
+ Manage GitHub issues: list, view, create, update, close, reopen, comment, and sub-issues.
616
636
 
617
637
  Supports bulk operations for view/close/reopen/comment via issue_numbers list.
618
638
 
619
639
  Examples:
640
+ - list: manage_issues(action="list", state="open", milestone="v1.0")
641
+ - list by creator: manage_issues(action="list", creator="username")
620
642
  - view: manage_issues(action="view", issue_numbers=[42])
621
643
  - create: manage_issues(action="create", title="Bug", template="bug_report")
622
644
  - create as sub-issue: manage_issues(action="create", title="Task 1", parent_issue=42)
@@ -629,6 +651,26 @@ def create_github_tools(mcp: FastMCP) -> None:
629
651
  try:
630
652
  client = _get_client()
631
653
 
654
+ # === LIST ACTION ===
655
+ if action == "list":
656
+ issues = client.list_issues(
657
+ owner=owner,
658
+ repo=repo,
659
+ state=state or "open",
660
+ labels=labels,
661
+ assignee=assignees[0] if assignees else None,
662
+ creator=creator,
663
+ milestone=milestone,
664
+ sort=sort or "updated",
665
+ limit=limit or 30,
666
+ )
667
+ return {
668
+ "action": "list",
669
+ "state": state or "open",
670
+ "count": len(issues),
671
+ "issues": issues,
672
+ }
673
+
632
674
  # === CREATE ACTION ===
633
675
  if action == "create":
634
676
  if not title:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quickcall-integrations
3
- Version: 0.3.7
3
+ Version: 0.3.8
4
4
  Summary: MCP server with developer integrations for Claude Code and Cursor
5
5
  Requires-Python: >=3.10
6
6
  Requires-Dist: fastmcp>=2.13.0
@@ -1,7 +1,7 @@
1
1
  mcp_server/__init__.py,sha256=6KGzjSPyVB6vQh150DwBjINM_CsZNDhOzwSQFWpXz0U,301
2
2
  mcp_server/server.py,sha256=kv5hh0J-M7yENUBBNI1bkq1y7MB0zn5R_-R1tib6_sk,3108
3
3
  mcp_server/api_clients/__init__.py,sha256=kOG5_sxIVpAx_tvf1nq_P0QCkqojAVidRE-wenLS-Wc,207
4
- mcp_server/api_clients/github_client.py,sha256=EXwNEP2u5r5YbVgxyaJO0Yb7eQixMk6QWhid7IIQ5uY,37568
4
+ mcp_server/api_clients/github_client.py,sha256=Mlh6BzMhZ05NqkX9A2O80eJIQXWuW4FnnN1DBM0WKC8,40135
5
5
  mcp_server/api_clients/slack_client.py,sha256=w3rcGghttfYw8Ird2beNo2LEYLc3rCTbUKMH4X7QQuQ,16447
6
6
  mcp_server/auth/__init__.py,sha256=D-JS0Qe7FkeJjYx92u_AqPx8ZRoB3dKMowzzJXlX6cc,780
7
7
  mcp_server/auth/credentials.py,sha256=sDS0W5c16i_UGvhG8Sh1RO93FxRn-hHVAdI9hlWuhx0,20011
@@ -12,10 +12,10 @@ mcp_server/resources/slack_resources.py,sha256=b_CPxAicwkF3PsBXIat4QoLbDUHM2g_iP
12
12
  mcp_server/tools/__init__.py,sha256=vIR2ujAaTXm2DgpTsVNz3brI4G34p-Jeg44Qe0uvWc0,405
13
13
  mcp_server/tools/auth_tools.py,sha256=kCPjPC1jrVz0XaRAwPea-ue8ybjLLTxyILplBDJ9Mv4,24477
14
14
  mcp_server/tools/git_tools.py,sha256=jyCTQR2eSzUFXMt0Y8x66758-VY8YCY14DDUJt7GY2U,13957
15
- mcp_server/tools/github_tools.py,sha256=ogLo0j1G44LTBIOknPgOG-JgTnLaNLGbLj1UccgWtoE,38337
15
+ mcp_server/tools/github_tools.py,sha256=ZBJzRhg1BSFdn9VS4qi0PYLCSGBXRfHviKzjR0LxO08,40058
16
16
  mcp_server/tools/slack_tools.py,sha256=-HVE_x3Z1KMeYGi1xhyppEwz5ZF-I-ZD0-Up8yBeoYE,11796
17
17
  mcp_server/tools/utility_tools.py,sha256=oxAXpdqtPeB5Ug5dvk54V504r-8v1AO4_px-sO6LFOw,3910
18
- quickcall_integrations-0.3.7.dist-info/METADATA,sha256=_76mJSIKsz6RU0o6uAmHYEXK9NetNnSMviVycU1T3M0,7070
19
- quickcall_integrations-0.3.7.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
20
- quickcall_integrations-0.3.7.dist-info/entry_points.txt,sha256=kkcunmJUzncYvQ1rOR35V2LPm2HcFTKzdI2l3n7NwiM,66
21
- quickcall_integrations-0.3.7.dist-info/RECORD,,
18
+ quickcall_integrations-0.3.8.dist-info/METADATA,sha256=d5t3CbdPI7v4PkgeoJ4x4i8KuB_RZ_GDZv2N6GhkghA,7070
19
+ quickcall_integrations-0.3.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
20
+ quickcall_integrations-0.3.8.dist-info/entry_points.txt,sha256=kkcunmJUzncYvQ1rOR35V2LPm2HcFTKzdI2l3n7NwiM,66
21
+ quickcall_integrations-0.3.8.dist-info/RECORD,,