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

83 lines
2.9 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.listChanged is False
assert capabilities.resources is not None
assert capabilities.resources.subscribe is False
assert capabilities.resources.listChanged is False
assert capabilities.prompts is not None
assert capabilities.prompts.listChanged 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:
initialize_result = client.initialize_result
assert initialize_result is not None
return initialize_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.listChanged is True
assert capabilities.resources is not None
assert capabilities.resources.subscribe is False
assert capabilities.resources.listChanged is True
assert capabilities.prompts is not None
assert capabilities.prompts.listChanged is True
assert capabilities.logging is not None