mirror of
https://github.com/blazickjp/arxiv-mcp-server.git
synced 2025-07-25 20:38:49 +03:00
73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
"""Configuration settings for the arXiv MCP server."""
|
|
|
|
import sys
|
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
from pathlib import Path
|
|
import logging
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
"""Server configuration settings."""
|
|
|
|
APP_NAME: str = "arxiv-mcp-server"
|
|
APP_VERSION: str = "0.2.11"
|
|
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
|