MatteoMass's picture
removed the tokens from env
9ad58d0
"""
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