| """Configuration for MCP Database Server.""" |
|
|
| import os |
| from dataclasses import dataclass |
|
|
|
|
| @dataclass |
| class DatabaseConfig: |
| url: str |
| read_only: bool = True |
| write_enabled: bool = False |
| max_rows: int = 1000 |
| max_query_time: int = 30 |
| max_output_bytes: int = 50_000 |
| sample_size: int = 5 |
| profile_top_n: int = 10 |
| openai_key: str | None = None |
| anthropic_key: str | None = None |
|
|
| @classmethod |
| def from_env(cls) -> "DatabaseConfig": |
| url = os.environ.get("DATABASE_URL", "") |
| if not url: |
| raise ValueError( |
| "DATABASE_URL environment variable is required. " |
| "Example: sqlite:///path/to/db.db" |
| ) |
|
|
| return cls( |
| url=url, |
| read_only=os.environ.get("DATABASE_READ_ONLY", "true").lower() == "true", |
| write_enabled=os.environ.get("DATABASE_WRITE_ENABLED", "false").lower() == "true", |
| max_rows=int(os.environ.get("DATABASE_MAX_ROWS", "1000")), |
| max_query_time=int(os.environ.get("DATABASE_MAX_QUERY_TIME", "30")), |
| max_output_bytes=int(os.environ.get("DATABASE_MAX_OUTPUT_BYTES", "50000")), |
| sample_size=int(os.environ.get("DATABASE_SAMPLE_SIZE", "5")), |
| profile_top_n=int(os.environ.get("DATABASE_PROFILE_TOP_N", "10")), |
| openai_key=os.environ.get("OPENAI_API_KEY") or None, |
| anthropic_key=os.environ.get("ANTHROPIC_API_KEY") or None, |
| ) |
|
|
| def is_effectively_read_only(self) -> bool: |
| return self.read_only and not self.write_enabled |
|
|