Skip to content

MCP Config Validators

dnallm.mcp.config_validators

Configuration validators for MCP Server.

This module provides Pydantic models for validating MCP server configurations and inference model configurations.

Classes

InferenceConfig

Bases: BaseModel

Inference configuration for model prediction.

Methods:
set_use_bf16 classmethod
set_use_bf16(v, info)

Set use_bf16 based on precision setting.

Source code in dnallm/mcp/config_validators.py
43
44
45
46
47
48
49
@field_validator("use_bf16", mode="before")
@classmethod
def set_use_bf16(cls, v, info):
    """Set use_bf16 based on precision setting."""
    if info.data and "precision" in info.data:
        return info.data["precision"] == "bfloat16"
    return v
set_use_fp16 classmethod
set_use_fp16(v, info)

Set use_fp16 based on precision setting.

Source code in dnallm/mcp/config_validators.py
35
36
37
38
39
40
41
@field_validator("use_fp16", mode="before")
@classmethod
def set_use_fp16(cls, v, info):
    """Set use_fp16 based on precision setting."""
    if info.data and "precision" in info.data:
        return info.data["precision"] == "float16"
    return v

InferenceModelConfig

Bases: BaseModel

Complete inference model configuration.

Methods:
validate_task_labels classmethod
validate_task_labels(v)

Validate that num_labels matches label_names length.

Source code in dnallm/mcp/config_validators.py
78
79
80
81
82
83
84
@field_validator("task")
@classmethod
def validate_task_labels(cls, v):
    """Validate that num_labels matches label_names length."""
    if v.num_labels != len(v.label_names):
        raise ValueError("num_labels must match the length of label_names")
    return v

LoggingConfig

Bases: BaseModel

Logging configuration.

MCPConfig

Bases: BaseModel

MCP protocol configuration.

MCPServerConfig

Bases: BaseModel

Complete MCP server configuration.

Methods:
validate_model_names classmethod
validate_model_names(v)

Validate that model names are unique.

Source code in dnallm/mcp/config_validators.py
182
183
184
185
186
187
188
189
@field_validator("models")
@classmethod
def validate_model_names(cls, v):
    """Validate that model names are unique."""
    names = [entry.name for entry in v.values()]
    if len(names) != len(set(names)):
        raise ValueError("Model names must be unique")
    return v
validate_multi_model_references classmethod
validate_multi_model_references(v, info)

Validate that multi-model configurations reference existing models.

Source code in dnallm/mcp/config_validators.py
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
@field_validator("multi_model")
@classmethod
def validate_multi_model_references(cls, v, info):
    """Validate that multi-model configurations reference existing
    models."""
    if info.data and "models" in info.data:
        available_models = set(info.data["models"].keys())
        for config in v.values():
            for model_name in config.models:
                if model_name not in available_models:
                    raise ValueError(
                        f"Model '{model_name}' referenced in multi-model "
                        f"config but not defined in models"
                    )
    return v
warn_both_transports classmethod
warn_both_transports(v, info)

Warn when both SSE and Streamable HTTP blocks are present.

Having both sse and streamable_http configured is a valid transitional state, but it is unusual in production. A warning is logged so operators are aware that two transports are active.

Source code in dnallm/mcp/config_validators.py
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
@field_validator("streamable_http")
@classmethod
def warn_both_transports(cls, v, info):
    """Warn when both SSE and Streamable HTTP blocks are present.

    Having both ``sse`` and ``streamable_http`` configured is a valid
    transitional state, but it is unusual in production. A warning is
    logged so operators are aware that two transports are active.
    """
    import logging

    if v is not None and info.data and "sse" in info.data:
        logging.getLogger(__name__).warning(
            "Both 'sse' and 'streamable_http' blocks are present in the "
            "server configuration. This is valid for transitional "
            "deployments but unusual in production."
        )
    return v

ModelConfig

Bases: BaseModel

Individual model configuration.

ModelEntryConfig

Bases: BaseModel

Model entry in the main configuration.

Methods:
validate_config_path classmethod
validate_config_path(v)

Validate config path format.

Source code in dnallm/mcp/config_validators.py
114
115
116
117
118
119
120
@field_validator("config_path")
@classmethod
def validate_config_path(cls, v):
    """Validate config path format."""
    if not v or not v.strip():
        raise ValueError("Config path cannot be empty")
    return v

ModelInfoConfig

Bases: BaseModel

Model information configuration.

MultiModelConfig

Bases: BaseModel

Multi-model parallel prediction configuration.

SSEConfig

Bases: BaseModel

SSE (Server-Sent Events) configuration.

ServerConfig

Bases: BaseModel

Server configuration.

StreamableHTTPConfig

Bases: BaseModel

Streamable HTTP configuration.

Configuration for the Streamable HTTP transport protocol as defined in the MCP specification 2025-11-25. The default path of /mcp follows the standard MCP endpoint convention.

Attributes:

Name Type Description
host str

Host address to bind the HTTP server to.

port int

Port number to bind the HTTP server to.

path str

URL path for the MCP endpoint (defaults to /mcp).

TaskConfig

Bases: BaseModel

Task configuration for DNA prediction models.

Functions:

validate_inference_model_config

validate_inference_model_config(config_path)

Validate inference model configuration file.

Source code in dnallm/mcp/config_validators.py
237
238
239
240
241
242
243
244
def validate_inference_model_config(config_path: str) -> InferenceModelConfig:
    """Validate inference model configuration file."""
    import yaml

    with open(config_path, encoding="utf-8") as f:
        config_dict = yaml.safe_load(f)

    return InferenceModelConfig(**config_dict)

validate_mcp_server_config

validate_mcp_server_config(config_path)

Validate MCP server configuration file.

Source code in dnallm/mcp/config_validators.py
227
228
229
230
231
232
233
234
def validate_mcp_server_config(config_path: str) -> MCPServerConfig:
    """Validate MCP server configuration file."""
    import yaml

    with open(config_path, encoding="utf-8") as f:
        config_dict = yaml.safe_load(f)

    return MCPServerConfig(**config_dict)