There is a possibility of using a "Virtual Layer" through Layer > Add Layer > Add/Edit Virtual Layer....
Let's assume there is a point layer called 'Random points in polygons' and a polygon layer called 'municipality_1' with their attribute tables.

With the following query, it is possible to count points within a polygon layer, grouped by an attribute of the points.
SELECT poly.*, countA, countB, countC FROM "municipality_1" AS poly LEFT JOIN ( SELECT poly.id AS idA, count(1) AS countA FROM "Random points in polygons" AS poi, "municipality_1" AS poly WHERE st_within(poi.geometry, poly.geometry) AND poi.attribute = 'A' GROUP BY poly.id ) ON poly.id = idA LEFT JOIN ( SELECT poly.id AS idB, count(1) AS countB FROM "Random points in polygons" AS poi, "municipality_1" AS poly WHERE st_within(poi.geometry, poly.geometry) AND poi.attribute = 'B' GROUP BY poly.id ) ON poly.id = idB LEFT JOIN ( SELECT poly.id AS idC, count(1) AS countC FROM "Random points in polygons" AS poi, "municipality_1" AS poly WHERE st_within(poi.geometry, poly.geometry) AND poi.attribute = 'C' GROUP BY poly.id ) ON poly.id = idC
The output polygon layer with its attribute table will look like this:
