File size: 1,817 Bytes
8bab08d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# file: mcp/servers/calendar_server.py
#!/usr/bin/env python3
import json
from datetime import datetime, timedelta
from aiohttp import web
class CalendarServer:
"""Calendar MCP server"""
async def handle_rpc(self, request):
data = await request.json()
method = data.get("method")
params = data.get("params", {})
if method == "health":
return web.json_response({"result": "ok"})
elif method == "calendar.suggest_slots":
# Generate slots for next week
now = datetime.utcnow()
slots = []
for days in [2, 3, 5]: # 2, 3, 5 days from now
slot_time = now + timedelta(days=days, hours=14) # 2 PM
slots.append({
"start_iso": slot_time.isoformat(),
"end_iso": (slot_time + timedelta(minutes=30)).isoformat()
})
return web.json_response({"result": slots})
elif method == "calendar.generate_ics":
summary = params["summary"]
start = params["start_iso"]
end = params["end_iso"]
ics = f"""BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Lucidya//MCP//EN
BEGIN:VEVENT
SUMMARY:{summary}
DTSTART:{start.replace('-', '').replace(':', '').replace('.', '')}
DTEND:{end.replace('-', '').replace(':', '').replace('.', '')}
DESCRIPTION:Discuss customer experience improvements
END:VEVENT
END:VCALENDAR"""
return web.json_response({"result": ics})
return web.json_response({"error": "Unknown method"}, status=400)
app = web.Application()
server = CalendarServer()
app.router.add_post("/rpc", server.handle_rpc)
if __name__ == "__main__":
web.run_app(app, port=9003) |