GitHub MCP Server
by DivyanshKushwaha
Verified
from mcp.server.fastmcp import FastMCP
from dotenv import load_dotenv
import httpx
import os
# Load environment variables
load_dotenv()
GITHUB_TOKEN = os.getenv("GITHUB_TOKEN")
# Initialize MCP server
mcp = FastMCP("github")
# GitHub API base URL and headers
BASE_URL = "https://api.github.com"
HEADERS = {
"Authorization": f"Bearer {GITHUB_TOKEN}",
"Accept": "application/vnd.github.v3+json",
"User-Agent": "mcp-github-server"
}
@mcp.tool()
async def get_user_info(username: str):
"""
Fetches information about a GitHub user.
Args:
username: The username of the GitHub user.
Returns:
A dictionary containing user details.
"""
url = f"{BASE_URL}/users/{username}"
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=HEADERS)
response.raise_for_status()
return response.json()
except httpx.HTTPStatusError as e:
return {"error": str(e)}
except httpx.TimeoutException:
return {"error": "Request timed out"}
@mcp.tool()
async def get_repo_info(owner: str, repo: str):
"""
Fetches information about a GitHub repository.
Args:
owner: The username of the repository owner.
repo: The name of the repository.
Returns:
A dictionary containing repository details.
"""
url = f"{BASE_URL}/repos/{owner}/{repo}"
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=HEADERS)
response.raise_for_status()
return response.json()
except httpx.HTTPStatusError as e:
return {"error": str(e)}
except httpx.TimeoutException:
return {"error": "Request timed out"}
@mcp.tool()
async def get_authenticated_user():
"""
Fetches information about the authenticated GitHub user.
Returns:
A dictionary containing the authenticated user's details.
"""
url = f"{BASE_URL}/user"
async with httpx.AsyncClient() as client:
try:
response = await client.get(url, headers=HEADERS)
response.raise_for_status()
return response.json()
except httpx.HTTPStatusError as e:
return {"error": str(e)}
except httpx.TimeoutException:
return {"error": "Request timed out"}
def main():
print("Running MCP server for GitHub!")
if __name__ == "__main__":
mcp.run(transport="stdio")