Source code for ralph.mcp.tools.bridge._upstream_proxy_handler
"""UpstreamProxyHandler class."""
from __future__ import annotations
from importlib import import_module
from typing import TYPE_CHECKING, cast
if TYPE_CHECKING:
from ralph.mcp.tools.bridge._types import JsonObject
from ralph.mcp.upstream.client import HasMediaManifest
from ralph.mcp.upstream.registry import UpstreamRegistry
[docs]
class UpstreamProxyHandler:
"""Proxy handler that forwards tool calls to an upstream MCP registry."""
def __init__(self, alias: str, upstream_registry: UpstreamRegistry) -> None:
self._alias = alias
self._upstream_registry = upstream_registry
def __call__(
self,
host_session: object | None,
workspace: object | None,
params: JsonObject,
) -> object:
result = self._upstream_registry.call_tool(
self._alias, params, session=cast("HasMediaManifest | None", host_session)
)
if workspace is not None and host_session is not None and isinstance(result, dict):
mod = import_module("ralph.mcp.tools.workspace")
mod.persist_upstream_media_artifacts(result, host_session, workspace)
return result