getTaskListsByProjectId
Retrieve all task lists associated with a specific project ID to organize and manage project tasks.
Instructions
Get all task lists by project ID
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | The ID of the project to get task lists from |
Implementation Reference
- Tool handler that validates projectId input, calls the teamwork service to fetch task lists, and returns the result formatted as MCP content.
export async function handleGetTaskListsByProjectId(input: any) { logger.info('Calling teamworkService.getTaskListsByProjectId()'); logger.info(`Project ID: ${input?.projectId}`); try { const projectId = input?.projectId; if (!projectId) { throw new Error("Project ID is required"); } const taskLists = await teamworkService.getTaskListsByProjectId(projectId); logger.info(`Task lists response received for project ID: ${projectId}`); if (taskLists) { return { content: [{ type: "text", text: JSON.stringify(taskLists, null, 2) }] }; } else { return { content: [{ type: "text", text: `Error getting task lists for project ID: ${projectId}` }] }; } } catch (error: any) { return createErrorResponse(error, 'Retrieving task lists'); } } - Tool definition/schema with name, description, input schema requiring a projectId integer, and annotations.
export const getTaskListsByProjectIdDefinition = { name: "getTaskListsByProjectId", description: "Get all task lists by project ID", inputSchema: { type: "object", properties: { projectId: { type: "integer", description: "The ID of the project to get task lists from" } }, required: ["projectId"] }, annotations: { title: "Get Task Lists by Project ID", readOnlyHint: false, destructiveHint: false, openWorldHint: false } }; - Service/helper function that makes the actual HTTP GET request to Teamwork API endpoint /projects/{projectId}/tasklists.json using the configured API client.
export const getTaskListsByProjectId = async (projectId: number) => { try { const api = ensureApiClient(); const response = await api.get(`/projects/${projectId}/tasklists.json`); return response.data; } catch (error: any) { logger.error(`Error fetching task lists for project ${projectId}: ${error.message}`); throw new Error(`Failed to fetch task lists for project ${projectId}`); } }; export default getTaskListsByProjectId; - src/tools/index.ts:15-71 (registration)Registration of the tool: imported and paired in the toolPairs array, added to toolHandlersMap, and re-exported.
import { getTaskListsByProjectIdDefinition as getTaskListsByProjectId, handleGetTaskListsByProjectId } from './tasks/getTaskListsByProjectId.js'; import { getTaskByIdDefinition as getTaskById, handleGetTaskById } from './tasks/getTaskById.js'; import { createTaskDefinition as createTask, handleCreateTask } from './tasks/createTask.js'; import { createSubTaskDefinition as createSubTask, handleCreateSubTask } from './tasks/createSubTask.js'; import { updateTaskDefinition as updateTask, handleUpdateTask } from './tasks/updateTask.js'; import { deleteTaskDefinition as deleteTask, handleDeleteTask } from './tasks/deleteTask.js'; import { getTasksMetricsCompleteDefinition as getTasksMetricsComplete, handleGetTasksMetricsComplete } from './tasks/getTasksMetricsComplete.js'; import { getTasksMetricsLateDefinition as getTasksMetricsLate, handleGetTasksMetricsLate } from './tasks/getTasksMetricsLate.js'; import { getTaskSubtasksDefinition as getTaskSubtasks, handleGetTaskSubtasks } from './tasks/getTaskSubtasks.js'; import { getTaskCommentsDefinition as getTaskComments, handleGetTaskComments } from './tasks/getTaskComments.js'; // Comments import { createCommentDefinition as createComment, handleCreateComment } from './comments/createComment.js'; // People import { getPeopleDefinition as getPeople, handleGetPeople } from './people/getPeople.js'; import { getPersonByIdDefinition as getPersonById, handleGetPersonById } from './people/getPersonById.js'; import { getProjectPeopleDefinition as getProjectPeople, handleGetProjectPeople } from './people/getProjectPeople.js'; import { addPeopleToProjectDefinition as addPeopleToProject, handleAddPeopleToProject } from './people/addPeopleToProject.js'; import { deletePersonDefinition as deletePerson, handleDeletePerson } from './people/deletePerson.js'; import { updatePersonDefinition as updatePerson, handleUpdatePerson } from './people/updatePerson.js'; // Companies import { createCompanyDefinition as createCompany, handleCreateCompany } from './companies/createCompany.js'; import { updateCompanyDefinition as updateCompany, handleUpdateCompany } from './companies/updateCompany.js'; import { deleteCompanyDefinition as deleteCompany, handleDeleteCompany } from './companies/deleteCompany.js'; import { getCompaniesDefinition as getCompanies, handleGetCompanies } from './companies/getCompanies.js'; import { getCompanyByIdDefinition as getCompanyById, handleGetCompanyById } from './companies/getCompanyById.js'; // Reporting import { getProjectsPeopleMetricsPerformanceDefinition as getProjectsPeopleMetricsPerformance, handleGetProjectsPeopleMetricsPerformance } from './people/getPeopleMetricsPerformance.js'; import { getProjectsPeopleUtilizationDefinition as getProjectsPeopleUtilization, handleGetProjectsPeopleUtilization } from './people/getPeopleUtilization.js'; import { getProjectPersonDefinition as getProjectPerson, handleGetProjectPerson } from './people/getProjectPerson.js'; import { getProjectsReportingUserTaskCompletionDefinition as getProjectsReportingUserTaskCompletion, handleGetProjectsReportingUserTaskCompletion } from './reporting/getUserTaskCompletion.js'; import { getProjectsReportingUtilizationDefinition as getProjectsReportingUtilization, handleGetProjectsReportingUtilization } from './people/getUtilization.js'; // Time-related imports import { getTimeDefinition as getTime, handleGetTime } from './time/getTime.js'; import { getProjectsAllocationsTimeDefinition as getAllocationTime, handleGetProjectsAllocationsTime } from './time/getAllocationTime.js'; // Core import { getTimezonesDefinition as getTimezones, handleGetTimezones } from './core/getTimezones.js'; // Define a structure that pairs tool definitions with their handlers interface ToolPair { definition: any; handler: Function; } // Create an array of tool pairs const toolPairs: ToolPair[] = [ { definition: getProjects, handler: handleGetProjects }, { definition: getCurrentProject, handler: handleGetCurrentProject }, { definition: createProject, handler: handleCreateProject }, { definition: getTasks, handler: handleGetTasks }, { definition: getTasksByProjectId, handler: handleGetTasksByProjectId }, { definition: getTaskListsByProjectId, handler: handleGetTaskListsByProjectId }, - src/utils/config.ts:251-257 (registration)Tool group registration: 'getTaskListsByProjectId' is listed under the 'Tasks' group in the toolGroups configuration map.
'Tasks': ['getTasks', 'getTasksByProjectId', 'getTaskListsByProjectId', 'getTaskById', 'createTask', 'createSubTask', 'updateTask', 'deleteTask', 'getTasksMetricsComplete', 'getTasksMetricsLate', 'getTaskSubtasks', 'getTaskComments'], 'People': ['getPeople', 'getPersonById', 'getProjectPeople', 'addPeopleToProject', 'deletePerson', 'getProjectsPeopleMetricsPerformance', 'getProjectsPeopleUtilization', 'getProjectPerson'], 'Reporting': ['getProjectsReportingUserTaskCompletion', 'getProjectsReportingUtilization'], 'Time': ['getTime', 'getProjectsAllocationsTime', 'getTimezones'], 'Comments': ['createComment'], 'Companies': ['createCompany', 'updateCompany', 'deleteCompany', 'getCompanies', 'getCompanyById'] };