from __future__ import annotations import asyncio import sys from pathlib import Path import mcp.types as mcp_types import pytest from mcp.client.session import ClientSession from mcp.client.stdio import StdioServerParameters, stdio_client from wf_mcp.models import BrokerConfig, ConnectionConfig from wf_mcp.proxy import create_proxy_client from .test_support import fixture_server_path def test_fixture_server_initialize_capabilities_are_observable_directly() -> None: async def inspect_capabilities() -> mcp_types.ServerCapabilities: params = StdioServerParameters( command=sys.executable, args=[fixture_server_path()], ) async with stdio_client(params) as (read_stream, write_stream): async with ClientSession(read_stream, write_stream) as session: result = await session.initialize() return result.capabilities try: capabilities = asyncio.run(inspect_capabilities()) except PermissionError as exc: pytest.skip(f"stdio MCP transport is not permitted in this environment: {exc}") assert capabilities.tools is not None assert capabilities.tools.list_changed is False assert capabilities.resources is not None assert capabilities.resources.subscribe is False assert capabilities.resources.list_changed is False assert capabilities.prompts is not None assert capabilities.prompts.list_changed is False assert capabilities.logging is None def test_unified_proxy_initialize_capabilities_reflect_local_surface( tmp_path: Path, ) -> None: config = BrokerConfig( store_root=tmp_path / "protocol_capabilities_store", connections=[ ConnectionConfig( id="fixture.personal", server="fixture", account="personal", metadata={ "transport": "stdio", "command": sys.executable, "args": [fixture_server_path()], }, ) ], ) async def inspect_capabilities() -> mcp_types.ServerCapabilities: client = create_proxy_client(config) async with client: # await client.initialize() # wow! assert client.server_capabilities is not None return client.server_capabilities try: capabilities = asyncio.run(inspect_capabilities()) except PermissionError as exc: pytest.skip(f"stdio MCP transport is not permitted in this environment: {exc}") # TODO disables most of these + find another way (preferably with _meta) to get these back assert capabilities.tools is not None # assert capabilities.tools.list_changed is True assert capabilities.resources is not None assert capabilities.resources.subscribe is False # assert capabilities.resources.list_changed is True assert capabilities.prompts is not None # assert capabilities.prompts.list_changed is True # assert capabilities.logging is not None