Dynamic SQL needs PREPARE. Here is a version of your sproc that runs, though it returns an empty set, so an input param or the logic is wrong.
DROP PROCEDURE IF EXISTS getTCs_cts;
DELIMITER //
CREATE PROCEDURE getTCs_cts( IN prj VARCHAR(100),IN pcts VARCHAR(100) )
BEGIN
DECLARE tpTBName, tcTBName VARCHAR(20);
SET @tpID=6; -- PREPAREd stmt needs a user var
Select TestPlanTbName from Project where ProjectName = prj into tpTBName;
Select TestCaseTbName from Project where ProjectName = prj into tcTBName;
-- PREPARE
SET @sql = Concat( 'Select TP_ID from ', tpTBName, ' where CTS=', Char(39), pcts, Char(39), ' into @tpID ' );
SELECT @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DROP PREPARE stmt;
SET @sql = Concat( 'Select * from ', tcTBName, ' where tp_id=', @tpID );
SELECT @sql;
PREPARE stmt FROM @sql;
EXECUTE stmt;
DROP PREPARE stmt;
END //
DELIMITER ;
PB