Skip to main content
Glama
test_mcp_server.py12.2 kB
""" 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()

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ilvolodel/iris-legacy'

If you have feedback or need assistance with the MCP directory API, please join our Discord server