40 lines
1.2 KiB
Python
40 lines
1.2 KiB
Python
"""Resources for the ops MCP server."""
|
|
|
|
import json
|
|
|
|
from mcp_servers.data.scenarios.manager import scenario_manager
|
|
from mcp_servers.ops import server
|
|
from mcp_servers.ops.server import mcp
|
|
|
|
|
|
@mcp.resource("ops://crew/roster")
|
|
def crew_roster() -> str:
|
|
"""Full crew roster for the current scenario.
|
|
|
|
Returns per crew: crew_id, name, role, base_hub, duty status summary.
|
|
"""
|
|
roster = []
|
|
for c in scenario_manager.crew:
|
|
hours_remaining = c.duty_hours_limit - c.duty_hours_elapsed
|
|
roster.append({
|
|
"crew_id": c.crew_id,
|
|
"name": c.name,
|
|
"role": c.role.value,
|
|
"base_hub": c.base_hub,
|
|
"duty_status": "AT_RISK" if hours_remaining <= 2.0 else "OK",
|
|
"hours_until_limit": round(hours_remaining, 2),
|
|
"next_flight": c.next_scheduled_flight,
|
|
})
|
|
return json.dumps(roster)
|
|
|
|
|
|
@mcp.resource("ops://handover/latest")
|
|
def latest_handover() -> str:
|
|
"""The most recently generated shift handover brief.
|
|
|
|
Returns null if no brief has been generated yet.
|
|
"""
|
|
if server._last_handover is None:
|
|
return json.dumps(None)
|
|
return json.dumps(server._last_handover)
|