Todoist MCP
by miottid
- src
import { TodoistApi } from '@doist/todoist-api-typescript'
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'
import { registerAddCommentToProject } from './tools/add-comment-to-project.js'
import { registerAddCommentToTask } from './tools/add-comment-to-task.js'
import { registerAddLabel } from './tools/add-label.js'
import { registerAddProject } from './tools/add-project.js'
import { registerAddSection } from './tools/add-section.js'
import { registerAddTask } from './tools/add-task.js'
import { registerCloseTask } from './tools/close-task.js'
import { registerDeleteComment } from './tools/delete-comment.js'
import { registerDeleteLabel } from './tools/delete-label.js'
import { registerDeleteProject } from './tools/delete-project.js'
import { registerDeleteSection } from './tools/delete-section.js'
import { registerDeleteTask } from './tools/delete-task.js'
import { registerGetComment } from './tools/get-comment.js'
import { registerGetLabel } from './tools/get-label.js'
import { registerGetLabels } from './tools/get-labels.js'
import { registerGetProjectCollaborators } from './tools/get-project-collaborators.js'
import { registerGetProjectComments } from './tools/get-project-comments.js'
import { registerGetProject } from './tools/get-project.js'
import { registerGetProjects } from './tools/get-projects.js'
import { registerGetSection } from './tools/get-section.js'
import { registerGetSections } from './tools/get-sections.js'
import { registerGetSharedLabels } from './tools/get-shared-labels.js'
import { registerGetTaskComments } from './tools/get-task-comments.js'
import { registerGetTask } from './tools/get-task.js'
import { registerGetTasks } from './tools/get-tasks.js'
import { registerMoveTaskToParent } from './tools/move-task-to-parent.js'
import { registerMoveTaskToProject } from './tools/move-task-to-project.js'
import { registerMoveTaskToSection } from './tools/move-task-to-section.js'
import { registerRemoveSharedLabel } from './tools/remove-shared-label.js'
import { registerRenameSharedLabel } from './tools/rename-shared-label.js'
import { registerReopenTask } from './tools/reopen-task.js'
import { registerUpdateComment } from './tools/update-comment.js'
import { registerUpdateLabel } from './tools/update-label.js'
import { registerUpdateProject } from './tools/update-project.js'
import { registerUpdateSection } from './tools/update-section.js'
import { registerUpdateTask } from './tools/update-task.js'
if (!process.env.TODOIST_API_KEY) {
throw new Error('TODOIST_API_KEY environment variable is required')
}
const api = new TodoistApi(process.env.TODOIST_API_KEY)
/* Create server instance */
const server = new McpServer({ name: 'todoist-mcp', version: '1.0.0' })
/* Register Todoist tools */
/* Projects */
registerAddProject(server, api)
registerGetProjects(server, api)
registerGetProject(server, api)
registerUpdateProject(server, api)
registerDeleteProject(server, api)
registerMoveTaskToParent(server, api)
/* Collaborators */
registerGetProjectCollaborators(server, api)
/* Tasks */
registerAddTask(server, api)
registerGetTask(server, api)
registerGetTasks(server, api)
registerUpdateTask(server, api)
registerCloseTask(server, api)
registerMoveTaskToProject(server, api)
registerMoveTaskToSection(server, api)
registerDeleteTask(server, api)
registerReopenTask(server, api)
/* Sections */
registerAddSection(server, api)
registerGetSection(server, api)
registerGetSections(server, api)
registerUpdateSection(server, api)
registerDeleteSection(server, api)
/* Comments */
registerAddCommentToProject(server, api)
registerAddCommentToTask(server, api)
registerGetComment(server, api)
registerUpdateComment(server, api)
registerDeleteComment(server, api)
registerGetTaskComments(server, api)
registerGetProjectComments(server, api)
/* Labels */
registerAddLabel(server, api)
registerDeleteLabel(server, api)
registerUpdateLabel(server, api)
registerGetLabel(server, api)
registerGetLabels(server, api)
registerGetSharedLabels(server, api)
registerRemoveSharedLabel(server, api)
registerRenameSharedLabel(server, api)
async function main() {
const transport = new StdioServerTransport()
await server.connect(transport)
console.error('Todoist Agent Server running on stdio')
}
main().catch((error) => {
console.error('Fatal error in main():', error)
process.exit(1)
})