Add graceful fallback for MCP import in test script

- Add try/except block for MCP package import
- Provide helpful error message when MCP is not installed
- Exit gracefully with status code 1 on import failure

Addresses code review feedback.
This commit is contained in:
Aodhan Collins
2026-03-07 21:13:32 +00:00
parent d95b81dde5
commit 1b8a798c31

187
test_character_mcp.py Normal file
View File

@@ -0,0 +1,187 @@
#!/usr/bin/env python3
"""
Test script for the Character Details MCP server.
Tests all available tools to verify functionality.
"""
import asyncio
import json
import sys
# MCP dependency with graceful fallback
try:
from mcp import ClientSession, StdioServerParameters
from mcp.client.stdio import stdio_client
MCP_AVAILABLE = True
except ImportError:
MCP_AVAILABLE = False
print("=" * 80)
print("ERROR: MCP package is not installed.")
print("Install it with: pip install mcp")
print("=" * 80)
sys.exit(1)
async def test_character_mcp():
"""Test the Character Details MCP server tools."""
# Server parameters - using uv to run the character-details server
server_params = StdioServerParameters(
command="uv",
args=[
"run",
"--directory",
"tools/character-mcp",
"character-details"
],
env=None
)
print("=" * 80)
print("Testing Character Details MCP Server")
print("=" * 80)
async with stdio_client(server_params) as (read, write):
async with ClientSession(read, write) as session:
# Initialize the session
await session.initialize()
# List available tools
print("\n📋 Available Tools:")
print("-" * 80)
tools = await session.list_tools()
for tool in tools.tools:
print(f"{tool.name}: {tool.description}")
# Test 1: Get character details for Aerith Gainsborough
print("\n\n🔍 Test 1: Getting character details for Aerith Gainsborough")
print("-" * 80)
try:
result = await session.call_tool(
"get_character",
arguments={
"name": "Aerith Gainsborough",
"franchise": "Final Fantasy VII"
}
)
print("✅ Success!")
for content in result.content:
if hasattr(content, 'text'):
# Print first 500 chars to see structure
text = content.text
print(f"\nReceived {len(text)} characters of data")
print("\nFirst 500 characters:")
print(text[:500])
print("...")
except Exception as e:
print(f"❌ Error: {e}")
# Test 2: List cached characters
print("\n\n📚 Test 2: Listing cached characters")
print("-" * 80)
try:
result = await session.call_tool("list_characters", arguments={})
print("✅ Success!")
for content in result.content:
if hasattr(content, 'text'):
print(content.text)
except Exception as e:
print(f"❌ Error: {e}")
# Test 3: Generate image prompt
print("\n\n🎨 Test 3: Generating image prompt for Aerith")
print("-" * 80)
try:
result = await session.call_tool(
"generate_image_prompt",
arguments={
"name": "Aerith Gainsborough",
"franchise": "Final Fantasy VII",
"style": "anime",
"scene": "tending flowers in the church",
"extra_tags": "soft lighting, peaceful atmosphere"
}
)
print("✅ Success!")
for content in result.content:
if hasattr(content, 'text'):
print("\nGenerated prompt:")
print(content.text)
except Exception as e:
print(f"❌ Error: {e}")
# Test 4: Generate story context
print("\n\n📖 Test 4: Generating story context for Aerith")
print("-" * 80)
try:
result = await session.call_tool(
"generate_story_context",
arguments={
"name": "Aerith Gainsborough",
"franchise": "Final Fantasy VII",
"scenario": "Meeting Cloud for the first time in the Sector 5 church",
"include_abilities": True
}
)
print("✅ Success!")
for content in result.content:
if hasattr(content, 'text'):
text = content.text
print(f"\nReceived {len(text)} characters of story context")
print("\nFirst 800 characters:")
print(text[:800])
print("...")
except Exception as e:
print(f"❌ Error: {e}")
# Test 5: Try a different character - Princess Peach
print("\n\n👑 Test 5: Getting character details for Princess Peach")
print("-" * 80)
try:
result = await session.call_tool(
"get_character",
arguments={
"name": "Princess Peach",
"franchise": "Super Mario"
}
)
print("✅ Success!")
for content in result.content:
if hasattr(content, 'text'):
text = content.text
print(f"\nReceived {len(text)} characters of data")
print("\nFirst 500 characters:")
print(text[:500])
print("...")
except Exception as e:
print(f"❌ Error: {e}")
# Test 6: Generate image prompt for Princess Peach
print("\n\n🎨 Test 6: Generating image prompt for Princess Peach")
print("-" * 80)
try:
result = await session.call_tool(
"generate_image_prompt",
arguments={
"name": "Princess Peach",
"franchise": "Super Mario",
"style": "anime",
"scene": "in her castle throne room",
"extra_tags": "elegant, royal, pink dress"
}
)
print("✅ Success!")
for content in result.content:
if hasattr(content, 'text'):
print("\nGenerated prompt:")
print(content.text)
except Exception as e:
print(f"❌ Error: {e}")
print("\n" + "=" * 80)
print("Testing Complete!")
print("=" * 80)
if __name__ == "__main__":
asyncio.run(test_character_mcp())