NumConSol is an interval-based numerical constraint and optimization solver to find a global optimum of a function. It is written in Python. In this document, we specify the NumConSol solver in Z, a formal specification language based on sets and predicates. The aim is to provide a solid foundation for restructuring and refactoring the current implementation of the NumConSol solver as well as facilitating its future improvements. The formal specification also allows us to design more effective testing for the solver, e.g., generating test cases from the specification.