mirror of
https://github.com/home-assistant/core.git
synced 2025-07-03 19:37:10 +00:00

* Add authentication support for Model Context Protocol (mcp) integration * Update homeassistant/components/mcp/application_credentials.py Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io> * Handle MCP servers with ports --------- Co-authored-by: Paulus Schoutsen <paulus@home-assistant.io>
36 lines
1.1 KiB
Python
36 lines
1.1 KiB
Python
"""Application credentials platform for Model Context Protocol."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from collections.abc import Generator
|
|
from contextlib import contextmanager
|
|
import contextvars
|
|
|
|
from homeassistant.components.application_credentials import AuthorizationServer
|
|
from homeassistant.core import HomeAssistant
|
|
|
|
CONF_ACTIVE_AUTHORIZATION_SERVER = "active_authorization_server"
|
|
|
|
_mcp_context: contextvars.ContextVar[AuthorizationServer] = contextvars.ContextVar(
|
|
"mcp_authorization_server_context"
|
|
)
|
|
|
|
|
|
@contextmanager
|
|
def authorization_server_context(
|
|
authorization_server: AuthorizationServer,
|
|
) -> Generator[None]:
|
|
"""Context manager for setting the active authorization server."""
|
|
token = _mcp_context.set(authorization_server)
|
|
try:
|
|
yield
|
|
finally:
|
|
_mcp_context.reset(token)
|
|
|
|
|
|
async def async_get_authorization_server(hass: HomeAssistant) -> AuthorizationServer:
|
|
"""Return authorization server, for the default auth implementation."""
|
|
if _mcp_context.get() is None:
|
|
raise RuntimeError("No MCP authorization server set in context")
|
|
return _mcp_context.get()
|