feat: implement XER MCP Server with 9 schedule query tools
Implement complete MCP server for parsing Primavera P6 XER files and exposing schedule data through MCP tools. All 4 user stories complete. Tools implemented: - load_xer: Parse XER files into SQLite database - list_activities: Query activities with pagination and filtering - get_activity: Get activity details by ID - list_relationships: Query activity dependencies - get_predecessors/get_successors: Query activity relationships - get_project_summary: Project overview with counts - list_milestones: Query milestone activities - get_critical_path: Query driving path activities Features: - Tab-delimited XER format parsing with pluggable table handlers - In-memory SQLite database for fast queries - Pagination with 100-item default limit - Multi-project file support with project selection - ISO8601 date formatting - NO_FILE_LOADED error handling for all query tools Test coverage: 81 tests (contract, integration, unit)
This commit is contained in:
34
src/xer_mcp/tools/get_activity.py
Normal file
34
src/xer_mcp/tools/get_activity.py
Normal file
@@ -0,0 +1,34 @@
|
||||
"""get_activity MCP tool implementation."""
|
||||
|
||||
from xer_mcp.db.queries import get_activity_by_id
|
||||
from xer_mcp.server import is_file_loaded
|
||||
|
||||
|
||||
async def get_activity(activity_id: str) -> dict:
|
||||
"""Get detailed information for a specific activity by ID.
|
||||
|
||||
Args:
|
||||
activity_id: The task_id of the activity
|
||||
|
||||
Returns:
|
||||
Dictionary with complete activity details or error
|
||||
"""
|
||||
if not is_file_loaded():
|
||||
return {
|
||||
"error": {
|
||||
"code": "NO_FILE_LOADED",
|
||||
"message": "No XER file is loaded. Use the load_xer tool first.",
|
||||
}
|
||||
}
|
||||
|
||||
activity = get_activity_by_id(activity_id)
|
||||
|
||||
if activity is None:
|
||||
return {
|
||||
"error": {
|
||||
"code": "ACTIVITY_NOT_FOUND",
|
||||
"message": f"Activity not found: {activity_id}",
|
||||
}
|
||||
}
|
||||
|
||||
return activity
|
||||
Reference in New Issue
Block a user