import subprocess
import json
import tempfile
import os
def test_json_server():
print("🔧 Testing JSON MCP Server")
print("=" * 40)
test_data = {
"users": [
{"id": 1, "name": "Alice", "active": True},
{"id": 2, "name": "Bob", "active": False}
],
"total": 2
}
with tempfile.NamedTemporaryFile(mode='w', suffix='.json', delete=False) as f:
json.dump(test_data, f, indent=2)
test_file = f.name
try:
print("\n1️⃣ Testing json-help...")
help_request = {
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "json-help",
"arguments": {}
}
}
result = subprocess.run(
['cargo', 'run', '--quiet', '--'],
input=json.dumps(help_request) + '\n',
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0 and result.stdout.strip():
try:
response = json.loads(result.stdout.strip())
if 'result' in response:
print("✅ json-help: Working correctly")
else:
print("❌ json-help: No result in response")
except json.JSONDecodeError:
print("❌ json-help: Invalid JSON response")
print(f"stdout: {result.stdout}")
print(f"stderr: {result.stderr}")
else:
print("❌ json-help: Process failed")
print(f"Return code: {result.returncode}")
print(f"stderr: {result.stderr}")
print("\n2️⃣ Testing json-read...")
read_request = {
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "json-read",
"arguments": {
"file_path": test_file.replace('\\', '/'), "format": "pretty"
}
}
}
result = subprocess.run(
['cargo', 'run', '--quiet', '--'],
input=json.dumps(read_request) + '\n',
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0 and result.stdout.strip():
try:
response = json.loads(result.stdout.strip())
if 'result' in response:
print("✅ json-read: Working correctly")
else:
print("❌ json-read: No result in response")
except json.JSONDecodeError:
print("❌ json-read: Invalid JSON response")
print(f"stdout: {result.stdout}")
else:
print("❌ json-read: Process failed")
print(f"Return code: {result.returncode}")
print(f"stderr: {result.stderr}")
print("\n3️⃣ Testing json-query...")
query_request = {
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "json-query",
"arguments": {
"file_path": test_file.replace('\\', '/'),
"query": "$.users[?(@.active == true)].name",
"format": "json"
}
}
}
result = subprocess.run(
['cargo', 'run', '--quiet', '--'],
input=json.dumps(query_request) + '\n',
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0 and result.stdout.strip():
try:
response = json.loads(result.stdout.strip())
if 'result' in response:
print("✅ json-query: Working correctly")
else:
print("❌ json-query: No result in response")
except json.JSONDecodeError:
print("❌ json-query: Invalid JSON response")
print(f"stdout: {result.stdout}")
else:
print("❌ json-query: Process failed")
print(f"Return code: {result.returncode}")
print(f"stderr: {result.stderr}")
print("\n4️⃣ Testing json-validate...")
validate_request = {
"jsonrpc": "2.0",
"id": 4,
"method": "tools/call",
"params": {
"name": "json-validate",
"arguments": {
"file_path": test_file.replace('\\', '/')
}
}
}
result = subprocess.run(
['cargo', 'run', '--quiet', '--'],
input=json.dumps(validate_request) + '\n',
capture_output=True,
text=True,
timeout=10
)
if result.returncode == 0 and result.stdout.strip():
try:
response = json.loads(result.stdout.strip())
if 'result' in response:
print("✅ json-validate: Working correctly")
else:
print("❌ json-validate: No result in response")
except json.JSONDecodeError:
print("❌ json-validate: Invalid JSON response")
print(f"stdout: {result.stdout}")
else:
print("❌ json-validate: Process failed")
print(f"Return code: {result.returncode}")
print(f"stderr: {result.stderr}")
print("\n" + "=" * 40)
print("🎉 Basic Test Complete!")
except Exception as e:
print(f"❌ Test failed with error: {e}")
import traceback
traceback.print_exc()
finally:
try:
os.unlink(test_file)
except:
pass
if __name__ == "__main__":
test_json_server()