PersonaTrip-Agent / server.py
tracyshen301
Configure Git LFS for image assets and prepare for push
ca1a2dd
from mcp.server.fastmcp import FastMCP
import sys, io, os, asyncio
from tools.user_trip_summary import summarize_trip as db_summarize_trip
from tools.fetch_trips_by_location import fetch_trips_by_location as fetch_trips
from tools.web_search import get_travel_intelligence_briefing
from tools.enhanced_personalized_planner import enhanced_create_personalized_plan
from tools.travel_data_analyzer import analyze_travel_data_with_llm
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
sys.stderr = io.TextIOWrapper(sys.stderr.buffer, encoding='utf-8', errors='replace')
mcp = FastMCP("persona-trip-mcp-server")
@mcp.tool()
async def web_search(destination: str, time_period: str, user_keywords: list[str] = None) -> str:
"""
Gathers real-time travel intelligence for a specific destination and time period.
Use this tool BEFORE planning to check for advisories, strikes, events, and user-specific keywords.
"""
return await get_travel_intelligence_briefing(destination, time_period, user_keywords or [])
@mcp.tool()
async def travel_data_analyzer(user_question: str) -> str:
"""
This tool is designed to understand and respond to queries that require aggregation, comparison, or statistical insights from all users' past travel data.
"""
return await analyze_travel_data_with_llm(user_question)
@mcp.tool()
async def enhanced_personalized_travel_planner(user_name: str, new_destination: str, trip_duration_days: int, user_request: str, web_intelligence: str = None ) -> str:
"""The main tool to generate a complete, personalized travel itinerary based on a user's travel history and latest web search result."""
return await enhanced_create_personalized_plan(user_name, new_destination, trip_duration_days, user_request, web_intelligence)
@mcp.tool()
async def summarize_trip(person_name: str, city: str) -> str:
"""Summarizes the travel experience of a specific user in a specific city from the database."""
return await asyncio.to_thread(db_summarize_trip, person_name, city)
@mcp.tool()
async def fetch_trips_by_location(city: str) -> str:
"""Retrieves all travel records related to a given city."""
return await asyncio.to_thread(fetch_trips, city)
if __name__ == "__main__":
mcp.run(transport='stdio')