Files
lda-wf/tests/wf_mcp/test_protocol_capabilities.py
T

84 lines
3.0 KiB
Python

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