- main.py: drops the hard-coded McpService class and MCP_SERVICES list. Lifespan now calls discover_and_filter() which does import + env filtering. Unset MCP_SERVICES reproduces today's behavior exactly. - spark_executor/service.py: new file exporting SERVICE = McpService( name='spark_executor', app=spark_executor.app, mount_path='/spark-executor-mcp'). - files_mcp/service.py: new file exporting SERVICE = McpService( name='files', app=files_mcp.app, mount_path='/files-mcp'). The McpService dataclass itself moved to common/mcp_service.py in the prior commit. 327 existing tests pass unchanged. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>