w
This commit is contained in:
@@ -0,0 +1,109 @@
|
||||
"""Return type definitions for MCP tools.
|
||||
|
||||
Uses TypedDict for lightweight structured return types without
|
||||
requiring Pydantic at the model layer.
|
||||
"""
|
||||
|
||||
from typing import TypedDict
|
||||
|
||||
|
||||
class Email(TypedDict, total=False):
|
||||
"""An email message."""
|
||||
subject: str
|
||||
sender: str
|
||||
sender_name: str
|
||||
date: str
|
||||
is_read: bool
|
||||
has_attachments: bool
|
||||
has_links: bool
|
||||
item_id: str
|
||||
size: int
|
||||
is_meeting: bool
|
||||
item_type: str
|
||||
to: list[str]
|
||||
cc: list[str]
|
||||
body: str
|
||||
body_type: str
|
||||
attachments: list[dict]
|
||||
# Meeting-specific fields
|
||||
location: str
|
||||
start: str
|
||||
end: str
|
||||
attendees_required: list[str]
|
||||
attendees_optional: list[str]
|
||||
|
||||
|
||||
class CalendarEvent(TypedDict, total=False):
|
||||
"""A calendar event / meeting."""
|
||||
subject: str
|
||||
start: str
|
||||
end: str
|
||||
location: str
|
||||
is_all_day: bool
|
||||
is_cancelled: bool
|
||||
is_meeting: bool
|
||||
is_recurring: bool
|
||||
organizer: str
|
||||
organizer_email: str
|
||||
my_response: str
|
||||
item_id: str
|
||||
body: str
|
||||
attendees_required: list[str]
|
||||
attendees_optional: list[str]
|
||||
|
||||
|
||||
class Person(TypedDict, total=False):
|
||||
"""A person from the Exchange directory."""
|
||||
name: str
|
||||
email: str
|
||||
mailbox_type: str
|
||||
first_name: str
|
||||
last_name: str
|
||||
job_title: str
|
||||
department: str
|
||||
company: str
|
||||
office: str
|
||||
alias: str
|
||||
manager: str
|
||||
manager_email: str
|
||||
phones: dict[str, str]
|
||||
address: str
|
||||
direct_reports: list[dict[str, str]]
|
||||
|
||||
|
||||
class Folder(TypedDict, total=False):
|
||||
"""A mail folder."""
|
||||
name: str
|
||||
id: str
|
||||
total_count: int
|
||||
unread_count: int
|
||||
child_folder_count: int
|
||||
|
||||
|
||||
class FreeSlot(TypedDict):
|
||||
"""A free time slot."""
|
||||
date: str
|
||||
start: str
|
||||
end: str
|
||||
duration_minutes: int
|
||||
|
||||
|
||||
class Availability(TypedDict, total=False):
|
||||
"""Availability data for a single attendee."""
|
||||
email: str
|
||||
busy_slots: int
|
||||
free_slots: int
|
||||
merged_freebusy: str
|
||||
|
||||
|
||||
class MeetingResult(TypedDict, total=False):
|
||||
"""Result of creating/updating a meeting."""
|
||||
success: bool
|
||||
subject: str
|
||||
date: str
|
||||
start_time: str
|
||||
end_time: str
|
||||
location: str
|
||||
required_attendees: list[str]
|
||||
optional_attendees: list[str]
|
||||
error: str
|
||||
Reference in New Issue
Block a user