UNPKG

@aashari/mcp-server-atlassian-jira

Version:

Node.js/TypeScript MCP server for Atlassian Jira. Equips AI systems (LLMs) with tools to list/get projects, search/get issues (using JQL/ID), and view dev info (commits, PRs). Connects AI capabilities directly into Jira project management and issue tracki

67 lines (66 loc) 3.27 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const vendor_atlassian_statuses_service_js_1 = __importDefault(require("../services/vendor.atlassian.statuses.service.js")); const logger_util_js_1 = require("../utils/logger.util.js"); const error_handler_util_js_1 = require("../utils/error-handler.util.js"); const atlassian_statuses_formatter_js_1 = require("./atlassian.statuses.formatter.js"); const controllerLogger = logger_util_js_1.Logger.forContext('controllers/atlassian.statuses.controller.ts'); controllerLogger.debug('Jira statuses controller initialized'); /** * List Jira statuses, optionally filtering by project. * * Handles fetching statuses either globally or for a specific project, * processing the potentially different API responses, and formatting the result. * * @param {ListStatusesToolArgsType} options - Options including optional projectKeyOrId. * @returns {Promise<ControllerResponse>} Formatted list of statuses. */ async function listStatuses(options = {}) { const methodLogger = controllerLogger.forMethod('listStatuses'); methodLogger.debug('Listing Jira statuses...', options); try { const rawResponse = await vendor_atlassian_statuses_service_js_1.default.listStatuses(options); let uniqueStatuses = []; if (options.projectKeyOrId) { // Handle project-specific response (array of issue types with nested statuses) methodLogger.debug('Processing project-specific status response'); const projectResponse = rawResponse; const statusMap = new Map(); projectResponse.forEach((issueType) => { issueType.statuses.forEach((status) => { if (!statusMap.has(status.id)) { statusMap.set(status.id, status); } }); }); uniqueStatuses = Array.from(statusMap.values()); methodLogger.debug(`Found ${uniqueStatuses.length} unique statuses for project`); } else { // Handle global response (simple array of statuses) methodLogger.debug('Processing global status response'); uniqueStatuses = rawResponse; methodLogger.debug(`Found ${uniqueStatuses.length} global statuses`); } // Sort statuses alphabetically by name for consistent output uniqueStatuses.sort((a, b) => a.name.localeCompare(b.name)); // Format the unique statuses const formattedContent = (0, atlassian_statuses_formatter_js_1.formatStatusesList)(uniqueStatuses, options.projectKeyOrId); return { content: formattedContent, // Pagination is not typically supported/needed for status lists }; } catch (error) { throw (0, error_handler_util_js_1.handleControllerError)(error, { entityType: 'Statuses', operation: 'listing', source: 'controllers/atlassian.statuses.controller.ts@listStatuses', additionalInfo: options, }); } } exports.default = { listStatuses };