diff --git a/whatsapp-mcp-server/main.py b/whatsapp-mcp-server/main.py index 018f4ed..4707ea1 100644 --- a/whatsapp-mcp-server/main.py +++ b/whatsapp-mcp-server/main.py @@ -1,6 +1,5 @@ -from typing import List, Dict, Any, Optional, Tuple +from typing import List, Dict, Any, Optional from mcp.server.fastmcp import FastMCP -from datetime import datetime from whatsapp import ( search_contacts as whatsapp_search_contacts, list_messages as whatsapp_list_messages, @@ -28,7 +27,8 @@ def search_contacts(query: str) -> List[Dict[str, Any]]: @mcp.tool() def list_messages( - date_range: Optional[Tuple[datetime, datetime]] = None, + after: Optional[str] = None, + before: Optional[str] = None, sender_phone_number: Optional[str] = None, chat_jid: Optional[str] = None, query: Optional[str] = None, @@ -41,7 +41,8 @@ def list_messages( """Get WhatsApp messages matching specified criteria with optional context. Args: - date_range: Optional tuple of (start_date, end_date) to filter messages by date + after: Optional ISO-8601 formatted string to only return messages after this date + before: Optional ISO-8601 formatted string to only return messages before this date sender_phone_number: Optional phone number to filter messages by sender chat_jid: Optional chat JID to filter messages by chat query: Optional search term to filter messages by content @@ -52,7 +53,8 @@ def list_messages( context_after: Number of messages to include after each match (default 1) """ messages = whatsapp_list_messages( - date_range=date_range, + after=after, + before=before, sender_phone_number=sender_phone_number, chat_jid=chat_jid, query=query, diff --git a/whatsapp-mcp-server/whatsapp.py b/whatsapp-mcp-server/whatsapp.py index 7d55b65..7b3db8e 100644 --- a/whatsapp-mcp-server/whatsapp.py +++ b/whatsapp-mcp-server/whatsapp.py @@ -185,9 +185,9 @@ def print_recent_messages(limit=10) -> List[Message]: if 'conn' in locals(): conn.close() - def list_messages( - date_range: Optional[Tuple[datetime, datetime]] = None, + after: Optional[str] = None, + before: Optional[str] = None, sender_phone_number: Optional[str] = None, chat_jid: Optional[str] = None, query: Optional[str] = None, @@ -209,10 +209,24 @@ def list_messages( params = [] # Add filters - if date_range: - where_clauses.append("messages.timestamp BETWEEN ? AND ?") - params.extend([date_range[0].isoformat(), date_range[1].isoformat()]) + if after: + try: + after = datetime.fromisoformat(after) + except ValueError: + raise ValueError(f"Invalid date format for 'after': {after}. Please use ISO-8601 format.") + where_clauses.append("messages.timestamp > ?") + params.append(after) + + if before: + try: + before = datetime.fromisoformat(before) + except ValueError: + raise ValueError(f"Invalid date format for 'before': {before}. Please use ISO-8601 format.") + + where_clauses.append("messages.timestamp < ?") + params.append(before) + if sender_phone_number: where_clauses.append("messages.sender = ?") params.append(sender_phone_number)