UNPKG

mcp-server-linear

Version:

An MCP server for interacting with Linear's API, providing tools for managing issues, projects, and teams

228 lines 10.4 kB
import { AuthHandler } from "../../features/auth/handlers/auth.handler.js"; import { IssueHandler } from "../../features/issues/handlers/issue.handler.js"; import { ProjectHandler } from "../../features/projects/handlers/project.handler.js"; import { TeamHandler } from "../../features/teams/handlers/team.handler.js"; import { UserHandler } from "../../features/users/handlers/user.handler.js"; import { CommentHandler } from "../../features/comments/handlers/comment.handler.js"; /** * Factory for creating and managing feature-specific handlers. * Ensures consistent initialization and dependency injection across handlers. */ const getToolName = (baseName) => { const prefix = process.env.TOOL_PREFIX; return prefix ? `${prefix}_${baseName}` : baseName; }; export class HandlerFactory { constructor(auth, graphqlClient) { // Initialize all handlers with shared dependencies this.authHandler = new AuthHandler(auth, graphqlClient); this.issueHandler = new IssueHandler(auth, graphqlClient); this.projectHandler = new ProjectHandler(auth, graphqlClient); this.teamHandler = new TeamHandler(auth, graphqlClient); this.userHandler = new UserHandler(auth, graphqlClient); this.commentHandler = new CommentHandler(auth, graphqlClient); } /** * Gets the appropriate handler for a given tool name. */ getHandlerForTool(toolName) { // Map tool names to their handlers and methods const handlerMap = { // Auth tools [getToolName("linear_auth")]: { handler: this.authHandler, method: "handleAuth", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_auth_callback")]: { handler: this.authHandler, method: "handleAuthCallback", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, // Issue tools [getToolName("linear_create_issue")]: { handler: this.issueHandler, method: "handleCreateIssue", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_create_issues")]: { handler: this.issueHandler, method: "handleCreateIssues", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_bulk_update_issues")]: { handler: this.issueHandler, method: "handleBulkUpdateIssues", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_edit_issue")]: { handler: this.issueHandler, method: "handleEditIssue", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_search_issues")]: { handler: this.issueHandler, method: "handleSearchIssues", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_search_issues_by_identifier")]: { handler: this.issueHandler, method: "handleSearchIssuesByIdentifier", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_get_issue")]: { handler: this.issueHandler, method: "handleGetIssue", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_delete_issue")]: { handler: this.issueHandler, method: "handleDeleteIssue", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_delete_issues")]: { handler: this.issueHandler, method: "handleDeleteIssues", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, // Project tools [getToolName("linear_create_project_with_issues")]: { handler: this.projectHandler, method: "handleCreateProjectWithIssues", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_get_project")]: { handler: this.projectHandler, method: "handleGetProject", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_list_projects")]: { handler: this.projectHandler, method: "handleListProjects", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, // Project Milestone tools [getToolName("linear_get_project_milestones")]: { handler: this.projectHandler, method: "handleGetProjectMilestones", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_create_project_milestone")]: { handler: this.projectHandler, method: "handleCreateProjectMilestone", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_update_project_milestone")]: { handler: this.projectHandler, method: "handleUpdateProjectMilestone", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_delete_project_milestone")]: { handler: this.projectHandler, method: "handleDeleteProjectMilestone", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, // Team tools [getToolName("linear_get_teams")]: { handler: this.teamHandler, method: "handleGetTeams", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, // User tools [getToolName("linear_get_user")]: { handler: this.userHandler, method: "handleGetUser", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, // Comment tools [getToolName("linear_create_comment")]: { handler: this.commentHandler, method: "handleCommentCreate", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_update_comment")]: { handler: this.commentHandler, method: "handleCommentUpdate", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_delete_comment")]: { handler: this.commentHandler, method: "handleCommentDelete", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_resolve_comment")]: { handler: this.commentHandler, method: "handleCommentResolve", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_unresolve_comment")]: { handler: this.commentHandler, method: "handleCommentUnresolve", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, [getToolName("linear_create_customer_need_from_attachment")]: { handler: this.commentHandler, method: "handleCustomerNeedCreateFromAttachment", description: process.env.TOOL_PREFIX ? `Tool for ${process.env.TOOL_PREFIX} Linear account` : undefined, }, }; const handlerInfo = handlerMap[toolName]; if (!handlerInfo) { throw new Error(`No handler found for tool: ${toolName}`); } return handlerInfo; } } //# sourceMappingURL=handler.factory.js.map