UNPKG

@aashari/mcp-server-atlassian-bitbucket

Version:

Node.js/TypeScript MCP server for Atlassian Bitbucket. Enables AI systems (LLMs) to interact with workspaces, repositories, and pull requests via tools (list, get, comment, search). Connects AI directly to version control workflows through the standard MC

67 lines (66 loc) 3.03 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleContentSearch = handleContentSearch; const logger_util_js_1 = require("../utils/logger.util.js"); const defaults_util_js_1 = require("../utils/defaults.util.js"); const pagination_util_js_1 = require("../utils/pagination.util.js"); const formatter_util_js_1 = require("../utils/formatter.util.js"); const atlassian_search_formatter_js_1 = require("./atlassian.search.formatter.js"); const vendor_atlassian_search_service_js_1 = __importDefault(require("../services/vendor.atlassian.search.service.js")); /** * Handle search for content (PRs, Issues, Wiki, etc.) */ async function handleContentSearch(workspaceSlug, repoSlug, query, limit = defaults_util_js_1.DEFAULT_PAGE_SIZE, cursor, contentType) { const methodLogger = logger_util_js_1.Logger.forContext('controllers/atlassian.search.content.controller.ts', 'handleContentSearch'); methodLogger.debug('Performing content search'); if (!query) { return { content: 'Please provide a search query for content search.', }; } try { const params = { workspaceSlug, query, limit, page: cursor ? parseInt(cursor, 10) : 1, }; // Add optional parameters if provided if (repoSlug) { params.repoSlug = repoSlug; } if (contentType) { params.contentType = contentType; } methodLogger.debug('Content search params:', params); const searchResult = await vendor_atlassian_search_service_js_1.default.searchContent(params); methodLogger.debug(`Content search complete, found ${searchResult.size} matches`); // Extract pagination information const pagination = (0, pagination_util_js_1.extractPaginationInfo)({ ...searchResult, // For content search, the Bitbucket API returns values and size differently // We need to map it to a format that extractPaginationInfo can understand page: params.page, pagelen: limit, }, pagination_util_js_1.PaginationType.PAGE); // Format the search results const formattedResults = (0, atlassian_search_formatter_js_1.formatContentSearchResults)(searchResult, contentType); // Add pagination information if available let finalContent = formattedResults; if (pagination && (pagination.hasMore || pagination.count !== undefined)) { const paginationString = (0, formatter_util_js_1.formatPagination)(pagination); finalContent += '\n\n' + paginationString; } return { content: finalContent, }; } catch (searchError) { methodLogger.error('Error performing content search:', searchError); throw searchError; } }