Ctrl K
ComunidadGuías…

butler/mcp/client_stdio_ops.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""Stdio MCP client best-effort helpers (P0-A)."""

from __future__ import annotations

import logging
from typing import Any

from butler.core.best_effort import async_safe_best_effort

logger = logging.getLogger(__name__)


async def close_stdio_session_safe(session: Any) -> None:
    async def _run() -> None:
        await session.__aexit__(None, None, None)

    await async_safe_best_effort(
        _run,
        label="client_stdio.session_close",
        default=None,
    )


async def close_stdio_transport_safe(transport: Any) -> None:
    async def _run() -> None:
        await transport.__aexit__(None, None, None)

    await async_safe_best_effort(
        _run,
        label="client_stdio.transport_close",
        default=None,
    )


def json_dumps_mcp_result_safe(result: Any) -> str:
    import json

    try:
        if hasattr(result, "model_dump"):
            return json.dumps(result.model_dump(), ensure_ascii=False, default=str)
    except Exception as exc:
        logger.debug("json dumps result skipped: %s", exc)
    return str(result)