| """ | |
| Pull-request utilities (read-only). | |
| """ | |
| from typing import List, Dict | |
| from mcp.server.fastmcp import Context | |
| from pmcp.mcp_server.github_server.services.pull_requests import PullRequestService | |
| from pmcp.mcp_server.github_server.github import github_client | |
| service = PullRequestService(github_client) | |
| async def get_pull_requests( | |
| ctx: Context, owner: str, repo: str, state: str = "open" | |
| ) -> Dict[str, List[str]]: | |
| """ | |
| Gets the pull requests | |
| Args: | |
| ctx: FastMCP request context (handles errors). | |
| owner (str): Repository owner. | |
| repo (str): Repository name. | |
| state (str): State of the pull request | |
| Returns: | |
| {"pull_requests": ["#1 - Add feature (open)", …]} | |
| """ | |
| try: | |
| pulls = await service.get_pr_list(owner, repo, state) | |
| titles = [f"#{pr['number']} - {pr['title']} ({pr['state']})" for pr in pulls] | |
| return {"pull_requests": titles} | |
| except Exception as exc: | |
| error_msg = f"Failed to get pull requests. Error: {str(exc)}" | |
| await ctx.error(str(exc)) | |
| raise | |
| async def create_pull_request( | |
| ctx: Context, | |
| owner: str, | |
| repo: str, | |
| title: str, | |
| head: str, | |
| base: str, | |
| body: str | None = None, | |
| draft: bool = False, | |
| ) -> Dict[str, str]: | |
| """ | |
| Create a pull request. | |
| Args: | |
| owner: Repository owner. | |
| repo: Repository name. | |
| title: PR title. | |
| head: The branch/tag you want to merge **from** (`user:branch` accepted). | |
| base: The branch you want to merge **into** (usually `main`). | |
| body: Optional Markdown description. | |
| draft: Whether to open as a draft PR. | |
| Returns: | |
| {"url": pull_request_url, "number": pr_number} | |
| """ | |
| try: | |
| pr = await service.create(owner, repo, title, head, base, body, draft) | |
| return {"url": pr["html_url"], "number": pr["number"]} | |
| except Exception as exc: | |
| error_msg = f"Error creating the pull request. Error {str(exc)}" | |
| await ctx.error(str(exc)) | |
| raise |