from dataclasses import dataclass
from typing import Dict, List, Optional
import json
import os
@dataclass
class MCPServerConfig:
name: str
command: List[str]
args: List[str] = None
env: Dict[str, str] = None
working_directory: Optional[str] = None
@dataclass
class MCPConfig:
servers: Dict[str, MCPServerConfig]
global_timeout: int = 30
max_retries: int = 3
@classmethod
def from_file(cls, config_path: str) -> 'MCPConfig':
with open(config_path, 'r') as f:
config_data = json.load(f)
servers = {}
for name, server_config in config_data.get('servers', {}).items():
servers[name] = MCPServerConfig(
name=name,
command=server_config['command'],
args=server_config.get('args', []),
env=server_config.get('env', {}),
working_directory=server_config.get('working_directory')
)
return cls(
servers=servers,
global_timeout=config_data.get('global_timeout', 30),
max_retries=config_data.get('max_retries', 3)
)
# Example configuration file (config.json)
example_config = {
"servers": {
"filesystem": {
"command": ["python", "filesystem_server.py"],
"args": ["--root", "/allowed/path"],
"env": {"LOG_LEVEL": "INFO"}
},
"database": {
"command": ["node", "database_server.js"],
"args": ["--db", "production.db"],
"working_directory": "/app/servers"
}
},
"global_timeout": 45,
"max_retries": 5
}