50 lines
1.4 KiB
Python
50 lines
1.4 KiB
Python
"""Resources for the passenger MCP server."""
|
|
|
|
import json
|
|
|
|
from mcp_servers.data.scenarios.manager import scenario_manager
|
|
from mcp_servers.passenger.server import mcp
|
|
|
|
|
|
@mcp.resource("ops://flights/{flight_id}/manifest")
|
|
def flight_manifest(flight_id: str) -> str:
|
|
"""Passenger manifest summary for a flight.
|
|
|
|
Returns: flight_id, passenger count, count by MP status tier,
|
|
special needs count, connection count.
|
|
Summary-level — no PII exposed through this resource.
|
|
"""
|
|
flight = None
|
|
for f in scenario_manager.flights:
|
|
if f.flight_id == flight_id:
|
|
flight = f
|
|
break
|
|
|
|
if not flight:
|
|
return json.dumps({"error": f"Flight {flight_id} not found"})
|
|
|
|
pax_on_flight = [
|
|
p for p in scenario_manager.passengers
|
|
if p.flight_id == flight_id
|
|
]
|
|
|
|
status_counts = {}
|
|
special_needs_count = 0
|
|
connection_count = 0
|
|
|
|
for p in pax_on_flight:
|
|
status = p.mileage_plus_status.value
|
|
status_counts[status] = status_counts.get(status, 0) + 1
|
|
if p.special_needs:
|
|
special_needs_count += 1
|
|
if p.connection_flight:
|
|
connection_count += 1
|
|
|
|
return json.dumps({
|
|
"flight_id": flight_id,
|
|
"total_passengers": flight.passenger_count,
|
|
"by_status": status_counts,
|
|
"special_needs_count": special_needs_count,
|
|
"connection_count": connection_count,
|
|
})
|