github-mcp-pr / main.py
2abet's picture
Initial commit
7a0e1f3 verified
from fastapi import FastAPI, Depends, HTTPException, Header
from typing import Optional
try:
from .models import SearchRequest, SearchResponse
from .github_client import GitHubClient
except ImportError:
from models import SearchRequest, SearchResponse
from github_client import GitHubClient
import os
app = FastAPI(title="MCP GitHub PR Opportunity Server")
def get_github_token(authorization: Optional[str] = Header(None)) -> str:
if authorization and authorization.startswith("token "):
return authorization.split(" ", 1)[1]
token = os.getenv("GITHUB_TOKEN")
if not token:
raise HTTPException(status_code=401, detail="GitHub token required in Authorization header or .env")
return token
@app.post("/search_pr_opportunities", response_model=SearchResponse)
def search_pr_opportunities(
request: SearchRequest,
token: str = Depends(get_github_token)
):
try:
client = GitHubClient(token)
opportunities, total_count = client.find_pr_opportunities(
keyword=request.keyword,
topic=request.topic,
per_page=request.per_page,
page=request.page
)
return SearchResponse(opportunities=opportunities, total_count=total_count)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))