Files
HC900-Crawler/mcp-server/test_mcp_server.py
windpacer 16fc7a2598 Initial commit: HC900 Crawler
Honeywell HC900을 Modbus TCP로 직접 폴링 → gRPC → C# 크롤러 → PostgreSQL.
기존 Experion OPC UA 데이터 경로를 HC900 직접 통신으로 대체.

- industrial-comm/cpp: C++ Modbus 게이트웨이 (gRPC 서버)
- src: C# .NET 8 ASP.NET Core 크롤러 + 웹 UI (3-Layer)
- mcp-server: Python FastMCP (RAG/NL2SQL/P&ID)
- 다중 컨트롤러(N-Controller) 지원

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-03 20:28:14 +09:00

112 lines
3.3 KiB
Python

#!/usr/bin/env python3
"""MCP 서버 테스트 스크립트 - MCP 표준 프로토콜 사용"""
import sys
import os
import json
import requests
SERVER_URL = "http://localhost:5001/mcp"
DXF_FILE_PATH = "/home/windpacer/projects/ExperionCrawler/futurePlan/End-to-End P&ID Graph Pipeline/No-10_Plant_PID.dxf"
def make_mcp_request(method: str, params: dict, request_id: str = "test") -> dict:
"""MCP 표준 프로토콜로 요청"""
headers = {
"Content-Type": "application/json",
"Accept": "application/json"
}
payload = {
"jsonrpc": "2.0",
"method": method,
"params": params,
"id": request_id
}
resp = requests.post(SERVER_URL, json=payload, headers=headers)
resp.raise_for_status()
return resp.json()
def test_initialize():
"""initialize 도구 테스트"""
print("=" * 60)
print("1. initialize 테스트")
print("=" * 60)
try:
result = make_mcp_request("initialize", {
"protocolVersion": "2024-11-05",
"capabilities": {},
"clientInfo": {
"name": "test-client",
"version": "1.0.0"
}
})
print(json.dumps(result, indent=2, ensure_ascii=False))
return "result" in result
except Exception as e:
print(f"오류: {e}")
return False
def test_list_tools():
"""tools/list 테스트"""
print("\n" + "=" * 60)
print("2. tools/list 테스트")
print("=" * 60)
try:
result = make_mcp_request("tools/list", {})
print(json.dumps(result, indent=2, ensure_ascii=False))
if "result" in result and "tools" in result["result"]:
print(f"\n✅ 등록된 도구 수: {len(result['result']['tools'])}")
for tool in result["result"]["tools"]:
print(f" - {tool['name']}")
return "result" in result
except Exception as e:
print(f"오류: {e}")
return False
def test_call_tool():
"""tools/call 테스트"""
print("\n" + "=" * 60)
print("3. tools/call 테스트 (parse_pid_drawing)")
print("=" * 60)
try:
result = make_mcp_request("tools/call", {
"name": "parse_pid_drawing",
"arguments": {
"filepath": DXF_FILE_PATH
}
})
print(json.dumps(result, indent=2, ensure_ascii=False))
return "result" in result
except Exception as e:
print(f"오류: {e}")
import traceback
traceback.print_exc()
return False
def main():
print("MCP 서버 테스트")
print(f"서버 URL: {SERVER_URL}")
print(f"DXF 파일: {DXF_FILE_PATH}")
results = []
results.append(("initialize", test_initialize()))
results.append(("tools/list", test_list_tools()))
results.append(("tools/call", test_call_tool()))
print("\n" + "=" * 60)
print("테스트 요약")
print("=" * 60)
for name, passed in results:
status = "✅ 통과" if passed else "❌ 실패"
print(f"{name}: {status}")
all_passed = all(r[1] for r in results)
if all_passed:
print("\n🎉 모든 테스트 통과!")
return 0
else:
print("\n⚠️ 일부 테스트 실패")
return 1
if __name__ == "__main__":
sys.exit(main())