"""
Test script for Microsoft MCP Server.
Tests all major endpoints with real data.
"""
import requests
import json
from typing import Dict, Any
# MCP Server URL (will be running on port 8001)
BASE_URL = "http://localhost:8001"
def print_result(test_name: str, success: bool, data: Any = None, error: str = None):
"""Print test result."""
status = "✅ PASS" if success else "❌ FAIL"
print(f"\n{status} - {test_name}")
if error:
print(f" Error: {error}")
elif data:
if isinstance(data, dict):
print(f" Result: {json.dumps(data, indent=2)[:300]}...")
else:
print(f" Result: {str(data)[:300]}...")
def test_health_check():
"""Test health check endpoint."""
try:
response = requests.get(f"{BASE_URL}/health", timeout=5)
success = response.status_code == 200
print_result("Health Check", success, response.json() if success else None,
None if success else f"Status {response.status_code}")
return success
except Exception as e:
print_result("Health Check", False, error=str(e))
return False
def test_user_profile():
"""Test user profile endpoint."""
try:
response = requests.get(f"{BASE_URL}/user/profile", timeout=10)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
profile = data.get('profile', {})
print_result("User Profile", True, {
"displayName": profile.get('displayName'),
"mail": profile.get('mail'),
"jobTitle": profile.get('jobTitle')
})
else:
print_result("User Profile", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("User Profile", False, error=str(e))
return False
def test_list_emails(limit: int = 5):
"""Test list emails endpoint."""
try:
response = requests.get(
f"{BASE_URL}/email/messages",
params={"limit": limit},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
messages = data.get('messages', [])
print_result("List Emails", True, {
"count": len(messages),
"first_email": {
"subject": messages[0].get('subject') if messages else None,
"from": messages[0].get('from', {}).get('emailAddress', {}).get('address') if messages else None
}
})
else:
print_result("List Emails", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("List Emails", False, error=str(e))
return False
def test_unread_emails():
"""Test unread emails endpoint."""
try:
response = requests.get(
f"{BASE_URL}/email/unread",
params={"limit": 5},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
messages = data.get('messages', [])
print_result("Unread Emails", True, {
"count": len(messages),
"unread_subjects": [m.get('subject', 'No subject')[:50] for m in messages[:3]]
})
else:
print_result("Unread Emails", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("Unread Emails", False, error=str(e))
return False
def test_search_emails(query: str = "Trusty"):
"""Test email search endpoint."""
try:
response = requests.get(
f"{BASE_URL}/email/search",
params={"query": query, "limit": 5},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
messages = data.get('messages', [])
print_result("Search Emails", True, {
"query": query,
"count": len(messages),
"results": [m.get('subject', 'No subject')[:50] for m in messages[:3]]
})
else:
print_result("Search Emails", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("Search Emails", False, error=str(e))
return False
def test_calendar_events():
"""Test calendar events endpoint."""
try:
response = requests.get(
f"{BASE_URL}/calendar/events",
params={"limit": 5},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
events = data.get('events', [])
print_result("Calendar Events", True, {
"count": len(events),
"first_event": {
"subject": events[0].get('subject') if events else None,
"start": events[0].get('start', {}).get('dateTime') if events else None
}
})
else:
print_result("Calendar Events", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("Calendar Events", False, error=str(e))
return False
def test_upcoming_events():
"""Test upcoming calendar events endpoint."""
try:
response = requests.get(
f"{BASE_URL}/calendar/events/upcoming",
params={"days": 7, "limit": 10},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
events = data.get('events', [])
print_result("Upcoming Events", True, {
"count": len(events),
"next_7_days": [e.get('subject', 'No subject')[:50] for e in events[:3]]
})
else:
print_result("Upcoming Events", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("Upcoming Events", False, error=str(e))
return False
def test_teams_list():
"""Test list teams endpoint."""
try:
response = requests.get(f"{BASE_URL}/teams", timeout=10)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
teams = data.get('teams', [])
print_result("List Teams", True, {
"count": len(teams),
"teams": [t.get('displayName', 'No name') for t in teams[:5]]
})
else:
print_result("List Teams", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("List Teams", False, error=str(e))
return False
def test_teams_chats():
"""Test list chats endpoint."""
try:
response = requests.get(
f"{BASE_URL}/teams/chats",
params={"limit": 10},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
chats = data.get('chats', [])
print_result("Teams Chats", True, {
"count": len(chats),
"chat_types": [c.get('chatType', 'unknown') for c in chats[:5]]
})
else:
print_result("Teams Chats", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("Teams Chats", False, error=str(e))
return False
def test_onedrive_recent():
"""Test recent files endpoint."""
try:
response = requests.get(
f"{BASE_URL}/onedrive/recent",
params={"limit": 5},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
items = data.get('items', [])
print_result("OneDrive Recent", True, {
"count": len(items),
"files": [i.get('name', 'No name')[:50] for i in items[:3]]
})
else:
print_result("OneDrive Recent", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("OneDrive Recent", False, error=str(e))
return False
def test_contacts_list():
"""Test list contacts endpoint."""
try:
response = requests.get(
f"{BASE_URL}/contacts",
params={"limit": 5},
timeout=10
)
success = response.status_code == 200
data = response.json() if success else None
if success and data:
contacts = data.get('contacts', [])
print_result("List Contacts", True, {
"count": len(contacts),
"contacts": [c.get('displayName', 'No name') for c in contacts[:3]]
})
else:
print_result("List Contacts", False, error=f"Status {response.status_code}")
return success
except Exception as e:
print_result("List Contacts", False, error=str(e))
return False
def run_all_tests():
"""Run all tests."""
print("╔═══════════════════════════════════════════════════════════════════════╗")
print("║ 🧪 MICROSOFT MCP SERVER - TEST SUITE ║")
print("╚═══════════════════════════════════════════════════════════════════════╝")
tests = [
("Health Check", test_health_check),
("User Profile", test_user_profile),
("List Emails", test_list_emails),
("Unread Emails", test_unread_emails),
("Search Emails", test_search_emails),
("Calendar Events", test_calendar_events),
("Upcoming Events", test_upcoming_events),
("Teams List", test_teams_list),
("Teams Chats", test_teams_chats),
("OneDrive Recent", test_onedrive_recent),
("Contacts List", test_contacts_list),
]
results = []
for test_name, test_func in tests:
try:
result = test_func()
results.append((test_name, result))
except Exception as e:
print(f"\n❌ FAIL - {test_name}")
print(f" Exception: {str(e)}")
results.append((test_name, False))
# Summary
print("\n╔═══════════════════════════════════════════════════════════════════════╗")
print("║ 📊 TEST SUMMARY ║")
print("╚═══════════════════════════════════════════════════════════════════════╝")
passed = sum(1 for _, result in results if result)
total = len(results)
print(f"\nTotal Tests: {total}")
print(f"Passed: {passed} ✅")
print(f"Failed: {total - passed} ❌")
print(f"Success Rate: {(passed/total*100):.1f}%")
print("\n" + "="*75)
for test_name, result in results:
status = "✅" if result else "❌"
print(f"{status} {test_name}")
print("="*75)
if __name__ == "__main__":
run_all_tests()