83 lines
2.9 KiB
Python
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
|