Do you have Finesse in the solution? Finesse has APIs to retrieve the agent state which can be used in Microsoft Teams. Assuming that the agent is logged in, you would not be able to get notifications for the agent state because Finesse only supports one connection to the notification service at a time.
If Finesse is not in the solution, the only way is to use the CTI protocol, but that seems overkill for just getting agent states.
After thinking about this some more, does Microsoft Teams have an API to change the status?
If you want to get the state of the agent from Microsoft Teams, you can use the GET API to get the agent's state: https://developer.cisco.com/docs/finesse/#!userget-user. This would have to be a poll mechanism from Microsoft teams because like I said earlier, you cannot have more than one connection.
If Microsoft Teams has an api to change the status, you can build a gadget to be put on the Finesse agent desktop that will call the Microsoft Teams API when the state changes. You can take a look at the LearningSampleGadget to see how to know when the state changes: https://github.com/CiscoDevNet/finesse-sample-code/tree/master/LearningSampleGadget. Then take a look at the ExternalRESTAPISampleGadet to see how to call an external REST API: https://github.com/CiscoDevNet/finesse-sample-code/tree/master/ExternalRestApiSampleGadget