Skip to main content
Glama
test_mcp_calendar.py8.01 kB
""" Test Calendar MCP endpoints. """ import requests from datetime import datetime, timedelta BASE_URL = "http://localhost:8001" def test_calendar_list_events(): """Test listing calendar events.""" print("\n=== Testing Calendar List Events ===") response = requests.get(f"{BASE_URL}/calendar/events?limit=5") print(f"Status: {response.status_code}") assert response.status_code == 200, f"Expected 200, got {response.status_code}" data = response.json() assert 'events' in data, "Response should contain events" events = data['events'] print(f"✓ Found {len(events)} events") if events: event = events[0] print(f" First event: {event.get('subject')} at {event.get('start', {}).get('dateTime')}") return event.get('id') return None def test_calendar_tentative_accept(event_id=None): """Test tentatively accepting a calendar event.""" print("\n=== Testing Calendar Tentative Accept ===") # Get an event if not provided if not event_id: response = requests.get(f"{BASE_URL}/calendar/events?limit=1") if response.status_code == 200: events = response.json().get("events", []) if events: event_id = events[0].get("id") print(f"Using event: {events[0].get('subject')}") if not event_id: print("⚠ No event available to test") return True # Skip test # Try to tentatively accept response = requests.post( f"{BASE_URL}/calendar/events/{event_id}/tentativelyAccept", json="Testing tentative accept from IRIS MCP" ) print(f"Status: {response.status_code}") if response.status_code == 200: data = response.json() print(f"✓ Tentatively accepted: {data.get('message')}") return True elif "you're the meeting organizer" in response.text.lower(): print("✓ Endpoint works correctly (can't respond to own meetings)") return True # This is expected behavior else: print(f"Response: {response.text}") return False def test_calendar_propose_new_time(event_id=None): """Test proposing a new time for a calendar event.""" print("\n=== Testing Calendar Propose New Time ===") # Get an event if not provided if not event_id: response = requests.get(f"{BASE_URL}/calendar/events?limit=1") if response.status_code == 200: events = response.json().get("events", []) if events: event = events[0] event_id = event.get("id") print(f"Using event: {event.get('subject')}") original_start = event.get("start", {}).get("dateTime", "2025-10-15T10:00:00") else: print("⚠ No event available to test") return True else: print("⚠ No event available to test") return True else: original_start = "2025-10-15T10:00:00" # Propose a new time (1 hour later) start_dt = datetime.fromisoformat(original_start.replace('Z', '+00:00').split('.')[0]) new_start = start_dt + timedelta(hours=1) new_end = new_start + timedelta(hours=1) payload = { "event_id": event_id, "start_datetime": new_start.strftime("%Y-%m-%dT%H:%M:%S"), "end_datetime": new_end.strftime("%Y-%m-%dT%H:%M:%S"), "comment": "Proposing a better time slot from IRIS MCP" } response = requests.post(f"{BASE_URL}/calendar/events/proposeNewTime", json=payload) print(f"Status: {response.status_code}") if response.status_code == 200: data = response.json() print(f"✓ Proposed new time: {data.get('message')}") if data.get('proposed_time'): print(f" Start: {data['proposed_time']['start']}") print(f" End: {data['proposed_time']['end']}") return True elif "you're the meeting organizer" in response.text.lower(): print("✓ Endpoint works correctly (can't propose time for own meetings)") return True # This is expected behavior else: print(f"Response: {response.text}") return False def test_find_meeting_times(): """Test finding available meeting times.""" print("\n=== Testing Find Meeting Times ===") # Test data payload = { "attendees": ["filippo.savarese@infocert.it"], "duration_minutes": 60, "start_date": datetime.now().strftime("%Y-%m-%d"), "end_date": (datetime.now() + timedelta(days=7)).strftime("%Y-%m-%d"), "max_candidates": 3 } response = requests.post(f"{BASE_URL}/calendar/findMeetingTimes", json=payload) print(f"Status: {response.status_code}") assert response.status_code == 200, f"Expected 200, got {response.status_code}" data = response.json() assert 'suggestions' in data, "Response should contain suggestions" suggestions = data['suggestions'] print(f"✓ Found {len(suggestions)} meeting time suggestions") if suggestions: first = suggestions[0] print(f" First suggestion: {first.get('start', {}).get('dateTime')} - {first.get('end', {}).get('dateTime')}") return True def test_get_schedule(): """Test getting schedule for attendees.""" print("\n=== Testing Get Schedule ===") # Test data payload = { "schedules": ["filippo.savarese@infocert.it"], "start_time": datetime.now().strftime("%Y-%m-%dT09:00:00"), "end_time": (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%dT17:00:00"), "availability_view_interval": 30 } response = requests.post(f"{BASE_URL}/calendar/getSchedule", json=payload) print(f"Status: {response.status_code}") assert response.status_code == 200, f"Expected 200, got {response.status_code}" data = response.json() assert 'schedules' in data, "Response should contain schedules" schedules = data['schedules'] print(f"✓ Retrieved schedule for {len(schedules)} attendees") if schedules: first = schedules[0] print(f" Attendee: {first.get('scheduleId')}") print(f" Availability: {first.get('availabilityView', '')[:20]}...") return True if __name__ == "__main__": print("=" * 60) print("IRIS MCP Server - Calendar Tests") print("=" * 60) results = {} try: event_id = test_calendar_list_events() results['list_events'] = True except AssertionError as e: print(f"✗ List events failed: {e}") results['list_events'] = False event_id = None try: results['tentative_accept'] = test_calendar_tentative_accept(event_id) except AssertionError as e: print(f"✗ Tentative accept failed: {e}") results['tentative_accept'] = False try: results['propose_new_time'] = test_calendar_propose_new_time(event_id) except AssertionError as e: print(f"✗ Propose new time failed: {e}") results['propose_new_time'] = False try: results['find_meeting_times'] = test_find_meeting_times() except AssertionError as e: print(f"✗ Find meeting times failed: {e}") results['find_meeting_times'] = False try: results['get_schedule'] = test_get_schedule() except AssertionError as e: print(f"✗ Get schedule failed: {e}") results['get_schedule'] = False # Summary print("\n" + "=" * 60) print("TEST SUMMARY") print("=" * 60) passed = sum(1 for v in results.values() if v) total = len(results) for test, result in results.items(): status = "✓ PASS" if result else "✗ FAIL" print(f"{status} - {test}") print(f"\nPassed: {passed}/{total} ({passed/total*100:.0f}%)") print("=" * 60) exit(0 if passed == total else 1)

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