PyGithub MCP Server

  • src
  • pygithub_mcp_server
"""PyGithub MCP Server implementation. This module provides a FastMCP server that exposes GitHub API operations. The server uses a modular architecture to organize tools into logical groups that can be selectively enabled or disabled through configuration. """ import logging import os import sys from pathlib import Path from mcp.server.fastmcp import FastMCP from pygithub_mcp_server.config import load_config from pygithub_mcp_server.tools import load_tools from pygithub_mcp_server.version import VERSION # Set up logging log_dir = Path(__file__).parent.parent.parent / 'logs' if not log_dir.exists(): os.makedirs(log_dir) log_file = log_dir / 'pygithub_mcp_server.log' logger = logging.getLogger() # Get root logger logger.setLevel(logging.INFO) logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler(log_file), logging.StreamHandler(sys.stderr) ], force=True ) logger = logging.getLogger(__name__) logger.debug("Logging initialized") def create_server(): """Create and configure the MCP server. Returns: FastMCP: The configured MCP server instance """ # Create FastMCP server instance mcp = FastMCP( "pygithub-mcp-server", version=VERSION, description="GitHub API operations via MCP" ) # Load configuration config = load_config() logger.debug(f"Loaded configuration: {len(config['tool_groups'])} tool groups defined") # Log which tool groups are enabled enabled_groups = [name for name, cfg in config["tool_groups"].items() if cfg.get("enabled", False)] logger.debug(f"Enabled tool groups: {', '.join(enabled_groups) or 'none'}") # Load and register tools based on configuration load_tools(mcp, config) return mcp if __name__ == "__main__": server = create_server() server.run()