# -*- coding: utf-8 -*-
"""Тест MCP-сервера: инструменты + запись на копии проекта."""
import asyncio
import json
import shutil
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
PY = r"C:\Users\Admin\mcp\dkc-ramcube\.venv\Scripts\python.exe"
SRV = r"C:\Users\Admin\mcp\dkc-ramcube\server.py"
SRC = r"C:\Users\Admin\Downloads\GRSH1.1_RamCube\vrsh1.xml"
TMP = r"C:\Users\Admin\mcp\dkc-ramcube\_test_copy.xml"
def show(res, limit=700):
txt = "".join(getattr(c, "text", "") or "" for c in res.content)
try:
data = json.loads(txt)
print(json.dumps(data, ensure_ascii=False, indent=1)[:limit])
return data
except Exception:
print(txt[:limit])
return None
async def main():
shutil.copy(SRC, TMP)
params = StdioServerParameters(command=PY, args=[SRV])
async with stdio_client(params) as (read, write):
async with ClientSession(read, write) as s:
await s.initialize()
print("=== инструменты:", [t.name for t in (await s.list_tools()).tools])
print("\n=== dkc_search('MNX250', in_min=200)")
show(await s.call_tool("dkc_search", {"query": "MNX250", "in_min": 200, "limit": 2}))
print("\n=== ramcube_apparatus_replace: элементы -174426 -> NW20")
show(await s.call_tool("ramcube_apparatus_replace", {
"xml_in": TMP, "xml_out": TMP,
"replacements": [{"element_id": "-174426", "new_device_id": 11820}]}))
print("\n=== ramcube_set_project (имя, кабели сверху)")
show(await s.call_tool("ramcube_set_project", {
"xml_path": TMP, "name": "ВРЩ1_тест", "cable_entrance": "сверху"}))
print("\n=== ramcube_project_read(копии)")
show(await s.call_tool("ramcube_project_read", {"xml_path": TMP}), 450)
if __name__ == "__main__":
asyncio.run(main())