@mseep/atlas-mcp-server
Version:
A Model Context Protocol (MCP) server for ATLAS, a Neo4j-powered task management system for LLM Agents - implementing a three-tier architecture (Projects, Tasks, Knowledge) to manage complex workflows.
63 lines (62 loc) • 2.74 kB
JavaScript
import { TaskService } from '../../../services/neo4j/taskService.js';
import { ProjectService } from '../../../services/neo4j/projectService.js';
import { BaseErrorCode, McpError, ProjectErrorCode } from '../../../types/errors.js';
import { logger } from '../../../utils/logger.js';
import { TaskListRequestSchema } from './types.js';
export const atlasListTasks = async (input, context) => {
try {
// Parse and validate input against schema
const validatedInput = TaskListRequestSchema.parse(input);
// Log operation
logger.info("Listing tasks for project", {
projectId: validatedInput.projectId,
requestId: context.requestContext?.requestId
});
// First check if the project exists
const projectExists = await ProjectService.getProjectById(validatedInput.projectId);
if (!projectExists) {
throw new McpError(ProjectErrorCode.PROJECT_NOT_FOUND, `Project with ID ${validatedInput.projectId} not found`, { projectId: validatedInput.projectId });
}
// Call the task service to get tasks with filters
const tasksResult = await TaskService.getTasks({
projectId: validatedInput.projectId,
status: validatedInput.status,
assignedTo: validatedInput.assignedTo,
priority: validatedInput.priority,
tags: validatedInput.tags,
taskType: validatedInput.taskType,
sortBy: validatedInput.sortBy,
sortDirection: validatedInput.sortDirection,
page: validatedInput.page,
limit: validatedInput.limit
});
logger.info("Tasks retrieved successfully", {
projectId: validatedInput.projectId,
taskCount: tasksResult.data.length,
totalTasks: tasksResult.total,
requestId: context.requestContext?.requestId
});
// Create the response object with task data
const responseData = {
tasks: tasksResult.data,
total: tasksResult.total,
page: tasksResult.page,
limit: tasksResult.limit,
totalPages: tasksResult.totalPages
};
// Return the raw response data object
return responseData;
}
catch (error) {
// Handle specific error cases
if (error instanceof McpError) {
throw error;
}
logger.error("Failed to list tasks", {
error,
requestId: context.requestContext?.requestId
});
// Convert other errors to McpError
throw new McpError(BaseErrorCode.INTERNAL_ERROR, `Error listing tasks: ${error instanceof Error ? error.message : 'Unknown error'}`);
}
};