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

59 lines (58 loc) 3.01 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.handlePullRequestSearch = handlePullRequestSearch; const logger_util_js_1 = require("../utils/logger.util.js"); const defaults_util_js_1 = require("../utils/defaults.util.js"); const vendor_atlassian_pullrequests_service_js_1 = __importDefault(require("../services/vendor.atlassian.pullrequests.service.js")); const pagination_util_js_1 = require("../utils/pagination.util.js"); const formatter_util_js_1 = require("../utils/formatter.util.js"); const atlassian_pullrequests_formatter_js_1 = require("./atlassian.pullrequests.formatter.js"); /** * Handle search for pull requests (uses PR API with query filter) */ async function handlePullRequestSearch(workspaceSlug, repoSlug, query, limit = defaults_util_js_1.DEFAULT_PAGE_SIZE, cursor) { const methodLogger = logger_util_js_1.Logger.forContext('controllers/atlassian.search.pullrequests.controller.ts', 'handlePullRequestSearch'); methodLogger.debug('Performing pull request search'); if (!query) { return { content: 'Please provide a search query for pull request search.', }; } try { // Format query for the Bitbucket API - specifically target title/description const formattedQuery = `(title ~ "${query}" OR description ~ "${query}")`; // Create the parameters for the PR service const params = { workspace: workspaceSlug, repo_slug: repoSlug, // Can safely use non-null assertion now that schema validation ensures it's present q: formattedQuery, pagelen: limit, page: cursor ? parseInt(cursor, 10) : undefined, sort: '-updated_on', }; methodLogger.debug('Using PR search params:', params); const prData = await vendor_atlassian_pullrequests_service_js_1.default.list(params); methodLogger.debug(`Search complete, found ${prData.values.length} matches`); // Extract pagination information const pagination = (0, pagination_util_js_1.extractPaginationInfo)(prData, pagination_util_js_1.PaginationType.PAGE); // Format the search results const formattedPrs = (0, atlassian_pullrequests_formatter_js_1.formatPullRequestsList)(prData); let finalContent = `# Pull Request Search Results\n\n${formattedPrs}`; // Add pagination information if available if (pagination && (pagination.hasMore || pagination.count !== undefined)) { const paginationString = (0, formatter_util_js_1.formatPagination)(pagination); finalContent += '\n\n' + paginationString; } return { content: finalContent, }; } catch (error) { methodLogger.error('Error performing pull request search:', error); throw error; } }