56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
import asyncio
|
|
import json
|
|
import sys
|
|
import pytest
|
|
from src import mcp_client
|
|
from src import models
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_external_mcp_real_process():
|
|
manager = mcp_client.ExternalMCPManager()
|
|
|
|
# Use our mock script
|
|
mock_script = "scripts/mock_mcp_server.py"
|
|
config = models.MCPServerConfig(
|
|
name="real-mock",
|
|
command="python",
|
|
args=[mock_script]
|
|
)
|
|
|
|
await manager.add_server(config)
|
|
|
|
try:
|
|
tools = manager.get_all_tools()
|
|
assert "echo" in tools
|
|
assert tools["echo"]["server"] == "real-mock"
|
|
|
|
result = await manager.async_dispatch("echo", {"hello": "world"})
|
|
assert "ECHO: {'hello': 'world'}" in result
|
|
finally:
|
|
await manager.stop_all()
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_tool_schemas_includes_external():
|
|
manager = mcp_client.get_external_mcp_manager()
|
|
# Reset manager
|
|
await manager.stop_all()
|
|
|
|
mock_script = "scripts/mock_mcp_server.py"
|
|
config = models.MCPServerConfig(
|
|
name="test-server",
|
|
command="python",
|
|
args=[mock_script]
|
|
)
|
|
|
|
await manager.add_server(config)
|
|
|
|
try:
|
|
schemas = mcp_client.get_tool_schemas()
|
|
echo_schema = next((s for s in schemas if s["name"] == "echo"), None)
|
|
|
|
assert echo_schema is not None
|
|
assert echo_schema["description"] == "Echo input"
|
|
assert echo_schema["parameters"] == {"type": "object"}
|
|
finally:
|
|
await manager.stop_all()
|