Kagi MCP Server

  • src
  • arxiv_mcp_server
"""Configuration settings for the arXiv MCP server.""" import sys from pydantic_settings import BaseSettings, SettingsConfigDict from pathlib import Path class Settings(BaseSettings): """Server configuration settings.""" APP_NAME: str = "arxiv-mcp-server" APP_VERSION: str = "0.2.6" MAX_RESULTS: int = 50 BATCH_SIZE: int = 20 REQUEST_TIMEOUT: int = 60 HOST: str = "0.0.0.0" PORT: int = 8000 model_config = SettingsConfigDict(extra="allow") @property def STORAGE_PATH(self) -> Path: """Get the resolved storage path and ensure it exists. Returns: Path: The absolute storage path. """ path = ( self._get_storage_path_from_args() or Path.home() / ".arxiv-mcp-server" / "papers" ) path = path.resolve() path.mkdir(parents=True, exist_ok=True) return path def _get_storage_path_from_args(self) -> Path | None: """Extract storage path from command line arguments. Returns: Path | None: The storage path if specified in arguments, None otherwise. """ args = sys.argv[1:] # If not enough arguments if len(args) < 2: return None # Look for the --storage-path option try: storage_path_index = args.index("--storage-path") except ValueError: return None # Early return if --storage-path is the last argument if storage_path_index + 1 >= len(args): return None # Try to resolve the path try: path = Path(args[storage_path_index + 1]) return path.resolve() except (TypeError, ValueError) as e: # TypeError: If the path argument is not string-like # ValueError: If the path string is malformed logger.warning(f"Invalid storage path format: {e}") except OSError as e: # OSError: If the path contains invalid characters or is too long logger.warning(f"Invalid storage path: {e}") return None