feat(workday): enhance worker status retrieval and add manager resolution tool
This commit is contained in:
parent
7e00f3026c
commit
829d8fcfff
@ -4,32 +4,132 @@ from typing import Any
|
|||||||
# This stays the same - it's your server's identity
|
# This stays the same - it's your server's identity
|
||||||
mcp = FastMCP("Workday-Sync")
|
mcp = FastMCP("Workday-Sync")
|
||||||
|
|
||||||
|
# Mock dataset with reporting-line relationships for manager checks (WIS-017 prep)
|
||||||
|
MOCK_WORKERS: dict[str, dict[str, str]] = {
|
||||||
|
"EMP001": {
|
||||||
|
"name": "Nathan",
|
||||||
|
"status": "Active",
|
||||||
|
"dept": "IT",
|
||||||
|
"email": "nathan@example.com",
|
||||||
|
"manager_id": "EMP010",
|
||||||
|
},
|
||||||
|
"EMP002": {
|
||||||
|
"name": "Terminated User",
|
||||||
|
"status": "Terminated",
|
||||||
|
"dept": "Sales",
|
||||||
|
"email": "user2@example.com",
|
||||||
|
"manager_id": "EMP020",
|
||||||
|
},
|
||||||
|
"EMP003": {
|
||||||
|
"name": "Alicia",
|
||||||
|
"status": "Active",
|
||||||
|
"dept": "IT",
|
||||||
|
"email": "alicia@example.com",
|
||||||
|
"manager_id": "EMP010",
|
||||||
|
},
|
||||||
|
"EMP004": {
|
||||||
|
"name": "Jordan",
|
||||||
|
"status": "Leave",
|
||||||
|
"dept": "Finance",
|
||||||
|
"email": "jordan@example.com",
|
||||||
|
"manager_id": "EMP030",
|
||||||
|
},
|
||||||
|
"EMP010": {
|
||||||
|
"name": "Priya Manager",
|
||||||
|
"status": "Active",
|
||||||
|
"dept": "IT",
|
||||||
|
"email": "priya@example.com",
|
||||||
|
"manager_id": "EMP100",
|
||||||
|
},
|
||||||
|
"EMP020": {
|
||||||
|
"name": "Ramon Director",
|
||||||
|
"status": "Active",
|
||||||
|
"dept": "Sales",
|
||||||
|
"email": "ramon@example.com",
|
||||||
|
"manager_id": "EMP100",
|
||||||
|
},
|
||||||
|
"EMP030": {
|
||||||
|
"name": "Morgan Lead",
|
||||||
|
"status": "Active",
|
||||||
|
"dept": "Finance",
|
||||||
|
"email": "morgan@example.com",
|
||||||
|
"manager_id": "EMP100",
|
||||||
|
},
|
||||||
|
"EMP100": {
|
||||||
|
"name": "Chief Exec",
|
||||||
|
"status": "Active",
|
||||||
|
"dept": "Executive",
|
||||||
|
"email": "ceo@example.com",
|
||||||
|
"manager_id": "",
|
||||||
|
},
|
||||||
|
# Intentional unresolved manager reference for mismatch test scenarios
|
||||||
|
"EMP777": {
|
||||||
|
"name": "Mismatch Case",
|
||||||
|
"status": "Active",
|
||||||
|
"dept": "Operations",
|
||||||
|
"email": "mismatch@example.com",
|
||||||
|
"manager_id": "EMP999",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
@mcp.tool()
|
@mcp.tool()
|
||||||
def get_worker_status(employee_id: str) -> dict[str, Any]:
|
def get_worker_status(employee_id: str) -> dict[str, Any]:
|
||||||
"""
|
"""
|
||||||
WIS-009: Fetch structured worker status.
|
WIS-009: Fetch structured worker status.
|
||||||
This replaces the previous string-based version.
|
This replaces the previous string-based version.
|
||||||
"""
|
"""
|
||||||
# 1. Mock Database (WIS-007)
|
worker_id = employee_id.upper()
|
||||||
mock_workers = {
|
worker = MOCK_WORKERS.get(worker_id)
|
||||||
"EMP001": {"name": "Nathan", "status": "Active", "dept": "IT", "email": "nathan@example.com"},
|
|
||||||
"EMP002": {"name": "Terminated User", "status": "Terminated", "dept": "Sales", "email": "user2@example.com"}
|
# Structured Return (WIS-004 Allowlist)
|
||||||
}
|
|
||||||
|
|
||||||
# 2. Logic
|
|
||||||
worker = mock_workers.get(employee_id.upper())
|
|
||||||
|
|
||||||
# 3. Structured Return (WIS-004 Allowlist)
|
|
||||||
if worker:
|
if worker:
|
||||||
return {
|
return {
|
||||||
"employee_id": employee_id.upper(),
|
"employee_id": worker_id,
|
||||||
"full_name": worker["name"],
|
"full_name": worker["name"],
|
||||||
"status": worker["status"],
|
"status": worker["status"],
|
||||||
"department": worker["dept"],
|
"department": worker["dept"],
|
||||||
"work_email": worker["email"]
|
"work_email": worker["email"],
|
||||||
|
"manager_id": worker["manager_id"],
|
||||||
}
|
}
|
||||||
|
|
||||||
return {"error": f"Worker {employee_id} not found."}
|
return {"error": f"Worker {employee_id} not found."}
|
||||||
|
|
||||||
|
|
||||||
|
@mcp.tool()
|
||||||
|
def get_worker_manager(employee_id: str) -> dict[str, Any]:
|
||||||
|
"""WIS-017 prep: resolve a worker's manager relationship from mock data."""
|
||||||
|
worker_id = employee_id.upper()
|
||||||
|
worker = MOCK_WORKERS.get(worker_id)
|
||||||
|
if not worker:
|
||||||
|
return {"error": f"Worker {employee_id} not found."}
|
||||||
|
|
||||||
|
manager_id = worker.get("manager_id", "")
|
||||||
|
if not manager_id:
|
||||||
|
return {
|
||||||
|
"employee_id": worker_id,
|
||||||
|
"employee_name": worker["name"],
|
||||||
|
"manager_id": "",
|
||||||
|
"manager_name": None,
|
||||||
|
"relationship_status": "no_manager_assigned",
|
||||||
|
}
|
||||||
|
|
||||||
|
manager = MOCK_WORKERS.get(manager_id)
|
||||||
|
if not manager:
|
||||||
|
return {
|
||||||
|
"employee_id": worker_id,
|
||||||
|
"employee_name": worker["name"],
|
||||||
|
"manager_id": manager_id,
|
||||||
|
"manager_name": None,
|
||||||
|
"relationship_status": "manager_not_found",
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
"employee_id": worker_id,
|
||||||
|
"employee_name": worker["name"],
|
||||||
|
"manager_id": manager_id,
|
||||||
|
"manager_name": manager["name"],
|
||||||
|
"relationship_status": "ok",
|
||||||
|
}
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
mcp.run()
|
mcp.run()
|
||||||
Loading…
x
Reference in New Issue
Block a user