config.py•1.79 kB
"""
OpenProject MCP Server Configuration
"""
import logging
from pydantic import validator
from pydantic_settings import BaseSettings
logger = logging.getLogger(__name__)
class OpenProjectSettings(BaseSettings):
    """OpenProject configuration with default values"""
    base_url: str = "http://14.103.141.123:8080"
    api_key: str = "539750190b72e7fa4bbdea73ae4a5e467ddeb2dda3963b40ed96a06a6814c273"
    timeout: int = 30
    class Config:
        env_prefix = "OPENPROJECT_"
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        # 记录配置来源,便于调试
        import os
        timeout_env = os.getenv("OPENPROJECT_TIMEOUT")
        if timeout_env:
            logger.info(f"✅ Timeout loaded from environment: {timeout_env}s")
        else:
            logger.info(f"ℹ️  Using default timeout: {self.timeout}s")
    @validator('base_url')
    def validate_base_url(cls, v):
        if not v.startswith(('http://', 'https://')):
            raise ValueError('base_url must start with http:// or https://')
        return v.rstrip('/')
    @validator('api_key')
    def validate_api_key(cls, v):
        if len(v) < 10:
            raise ValueError('api_key appears too short')
        return v
    def get_client(self):
        """Create optimized HTTP client"""
        import httpx
        logger.info(f"Creating HTTP client for {self.base_url}")
        return httpx.AsyncClient(
            base_url=self.base_url,
            headers={
                "Authorization": f"Bearer {self.api_key}",
                "Content-Type": "application/json",
                "Accept": "application/hal+json,application/json"
            },
            timeout=self.timeout,
            limits=httpx.Limits(max_keepalive_connections=10)
        )