Upload transport_server.py with huggingface_hub
Browse files- transport_server.py +95 -0
transport_server.py
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
from mcp.server.fastmcp import FastMCP
|
| 2 |
+
import random
|
| 3 |
+
import urllib.parse
|
| 4 |
+
|
| 5 |
+
mcp = FastMCP("TransportAgent")
|
| 6 |
+
|
| 7 |
+
# Transfer service providers
|
| 8 |
+
TRANSFER_PROVIDERS = [
|
| 9 |
+
{"name": "Blacklane", "type": "Premium", "base_price": 65},
|
| 10 |
+
{"name": "Welcome Pickups", "type": "Standard Plus", "base_price": 45},
|
| 11 |
+
{"name": "GetTransfer", "type": "Standard", "base_price": 35},
|
| 12 |
+
{"name": "Uber Black", "type": "Premium", "base_price": 55},
|
| 13 |
+
]
|
| 14 |
+
|
| 15 |
+
@mcp.tool()
|
| 16 |
+
def book_transfer(pickup: str, dropoff: str, passengers: int) -> str:
|
| 17 |
+
"""Book an airport transfer or taxi with booking links."""
|
| 18 |
+
|
| 19 |
+
# Extract city from pickup/dropoff
|
| 20 |
+
city = pickup.replace(" Airport", "").replace(" International", "").strip()
|
| 21 |
+
city_encoded = urllib.parse.quote(city)
|
| 22 |
+
|
| 23 |
+
vehicle = "Mercedes V-Class" if passengers > 3 else "Mercedes E-Class"
|
| 24 |
+
vehicle_emoji = "🚐" if passengers > 3 else "🚗"
|
| 25 |
+
|
| 26 |
+
results = []
|
| 27 |
+
results.append(f"🚕 **Airport Transfer Options**")
|
| 28 |
+
results.append(f"📍 {pickup} → {dropoff}")
|
| 29 |
+
results.append(f"👥 {passengers} passengers")
|
| 30 |
+
results.append("")
|
| 31 |
+
results.append("---")
|
| 32 |
+
|
| 33 |
+
for i, provider in enumerate(TRANSFER_PROVIDERS[:3], 1):
|
| 34 |
+
price_var = random.uniform(0.9, 1.2)
|
| 35 |
+
price = int(provider["base_price"] * price_var * (1.3 if passengers > 3 else 1))
|
| 36 |
+
wait_time = random.randint(5, 15)
|
| 37 |
+
rating = round(random.uniform(4.5, 4.9), 1)
|
| 38 |
+
|
| 39 |
+
# Build booking URL
|
| 40 |
+
if provider["name"] == "GetTransfer":
|
| 41 |
+
book_url = f"https://gettransfer.com/en?from={urllib.parse.quote(pickup)}&to={urllib.parse.quote(dropoff)}"
|
| 42 |
+
elif provider["name"] == "Welcome Pickups":
|
| 43 |
+
book_url = f"https://www.welcomepickups.com/search/?pickup={urllib.parse.quote(pickup)}"
|
| 44 |
+
else:
|
| 45 |
+
book_url = f"https://www.google.com/search?q={urllib.parse.quote(provider['name'] + ' ' + city + ' airport transfer')}"
|
| 46 |
+
|
| 47 |
+
results.append("")
|
| 48 |
+
results.append(f"### {vehicle_emoji} Option {i}: {provider['name']}")
|
| 49 |
+
results.append(f"🚘 **{provider['type']}** - {vehicle}")
|
| 50 |
+
results.append(f"💰 **${price}** all-inclusive | ⭐ {rating}/5")
|
| 51 |
+
results.append(f"✅ Meet & Greet • Flight tracking • {wait_time}min free wait")
|
| 52 |
+
results.append(f"🔗 [Book {provider['name']}]({book_url})")
|
| 53 |
+
results.append("")
|
| 54 |
+
|
| 55 |
+
results.append("---")
|
| 56 |
+
results.append("")
|
| 57 |
+
results.append(f"💡 **Tip:** Book in advance for guaranteed pickup. [Compare all transfers](https://www.rome2rio.com/s/{urllib.parse.quote(pickup)}/{urllib.parse.quote(dropoff)})")
|
| 58 |
+
|
| 59 |
+
return "\n".join(results)
|
| 60 |
+
|
| 61 |
+
@mcp.tool()
|
| 62 |
+
def check_trains(origin: str, destination: str, date: str) -> str:
|
| 63 |
+
"""Check train schedules between cities with booking links."""
|
| 64 |
+
|
| 65 |
+
origin_encoded = urllib.parse.quote(origin)
|
| 66 |
+
dest_encoded = urllib.parse.quote(destination)
|
| 67 |
+
|
| 68 |
+
times = ["08:00", "10:30", "14:15", "18:45"]
|
| 69 |
+
|
| 70 |
+
results = []
|
| 71 |
+
results.append(f"🚆 **Train Schedule: {origin} → {destination}**")
|
| 72 |
+
results.append(f"📅 Date: {date}")
|
| 73 |
+
results.append("")
|
| 74 |
+
results.append("---")
|
| 75 |
+
|
| 76 |
+
for i, t in enumerate(times, 1):
|
| 77 |
+
train_num = f"TR{random.randint(100,999)}"
|
| 78 |
+
duration_h = random.randint(1, 3)
|
| 79 |
+
duration_m = random.choice([0, 15, 30, 45])
|
| 80 |
+
price = random.randint(40, 120)
|
| 81 |
+
seats = random.randint(5, 50)
|
| 82 |
+
|
| 83 |
+
# Build booking URL
|
| 84 |
+
trainline_url = f"https://www.thetrainline.com/book/results?origin={origin_encoded}&destination={dest_encoded}&outwardDate={date}"
|
| 85 |
+
|
| 86 |
+
results.append("")
|
| 87 |
+
results.append(f"### 🚄 Option {i}: {train_num} - Departs {t}")
|
| 88 |
+
results.append(f"⏱️ {duration_h}h {duration_m}m | 💰 **${price}** | 💺 {seats} seats")
|
| 89 |
+
results.append(f"🔗 [Book on Trainline]({trainline_url})")
|
| 90 |
+
results.append("")
|
| 91 |
+
|
| 92 |
+
return "\n".join(results)
|
| 93 |
+
|
| 94 |
+
if __name__ == "__main__":
|
| 95 |
+
mcp.run()
|