There is a meta capability create_posts that is not documented but is used by WordPress to check before inserting the various “Add New” buttons and links. In your custom post type declaration, add capabilities (not to be confused with cap) and then set it to do_not_allow as in the below snippet. Additionally, to map meta capabilities for custom post types we can use map_meta_cap hook as it’s explain here:

In the below snippet we will be using “feedback” custom post type as an example.