In order for a caller to use a PROC
with a table valued parameter, you'll need to (unintuitively) grant execute permissions on the TVP
type to those calling the PROC
i.e.
GRANT EXECUTE ON TYPE::[schema].[MyTVP] to [SomeRole]
Edit
I believe I was able to replicate the issue, viz working from a minimal set of permissions granted to a user. The vital step is for the DBO or Schema Owner of your TVP to grant you the following access to it, in order to be able to use it in a PROC
(without this access, I was able to declare a loose variable of the TVP type, but not use it in a PROC).
GRANT REFERENCES ON TYPE::[schema].[MyTVP] to YOURROLE -- Or User.
Grant Reference here
(Obviously you'll also need CREATE PROCEDURE
permission, plus relevant access to any objects used in the PROC)
Consumers of the PROC will need to also have the GRANT EXECUTE
permission on the Proc and on the Type as per the initial answer.