"""
Configuration models for the FastMCP OpenAPI server.
"""
from typing import Optional, Dict, Any, Literal
from pydantic import BaseModel, Field
class AuthConfig(BaseModel):
"""Authentication configuration for API requests."""
type: Literal["bearer", "basic", "apikey"] = Field(
description="Type of authentication"
)
token: Optional[str] = Field(
default=None,
description="Bearer token or API key value"
)
username: Optional[str] = Field(
default=None,
description="Username for basic auth"
)
password: Optional[str] = Field(
default=None,
description="Password for basic auth"
)
header_name: Optional[str] = Field(
default=None,
description="Header name for API key authentication"
)
query_param: Optional[str] = Field(
default=None,
description="Query parameter name for API key authentication"
)
class ServerConfig(BaseModel):
"""Configuration for the OpenAPI server."""
name: str = Field(
default="OpenAPI Server",
description="Name of the MCP server"
)
description: Optional[str] = Field(
default=None,
description="Description of the server"
)
timeout: int = Field(
default=30,
description="HTTP request timeout in seconds"
)
max_retries: int = Field(
default=3,
description="Maximum number of retries for failed requests"
)
debug: bool = Field(
default=False,
description="Enable debug logging"
)
port: int = Field(
default=8000,
description="Port for HTTP transports"
)
class APIConfig(BaseModel):
"""Configuration for a specific API."""
spec_url: str = Field(
description="URL or file path to the OpenAPI specification"
)
name: str = Field(
description="Unique name for this API"
)
base_url: Optional[str] = Field(
default=None,
description="Override base URL for API calls"
)
auth: Optional[AuthConfig] = Field(
default=None,
description="Authentication configuration"
)
headers: Optional[Dict[str, str]] = Field(
default_factory=dict,
description="Default headers to include with all requests"
)
enabled: bool = Field(
default=True,
description="Whether this API is enabled"
)
rate_limit: Optional[int] = Field(
default=None,
description="Rate limit in requests per minute"
)