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

64 lines (63 loc) 3.23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handleRepositorySearch = handleRepositorySearch; 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_repositories_formatter_js_1 = require("./atlassian.repositories.formatter.js"); const transport_util_js_1 = require("../utils/transport.util.js"); /** * Handle search for repositories (limited functionality in the API) */ async function handleRepositorySearch(workspaceSlug, _repoSlug, // Renamed to indicate it's intentionally unused query, limit = defaults_util_js_1.DEFAULT_PAGE_SIZE, cursor) { const methodLogger = logger_util_js_1.Logger.forContext('controllers/atlassian.search.repositories.controller.ts', 'handleRepositorySearch'); methodLogger.debug('Performing repository search'); if (!query) { return { content: 'Please provide a search query for repository search.', }; } try { const credentials = (0, transport_util_js_1.getAtlassianCredentials)(); if (!credentials) { throw new Error('Atlassian credentials are required for this operation'); } // Build query params const queryParams = new URLSearchParams(); // Format the query - Bitbucket's repository API allows filtering by name/description const formattedQuery = `(name ~ "${query}" OR description ~ "${query}")`; queryParams.set('q', formattedQuery); // Add pagination parameters queryParams.set('pagelen', limit.toString()); if (cursor) { queryParams.set('page', cursor); } // Sort by most recently updated queryParams.set('sort', '-updated_on'); // Use the repositories endpoint to search const path = `/2.0/repositories/${workspaceSlug}?${queryParams.toString()}`; methodLogger.debug(`Sending repository search request: ${path}`); const searchData = await (0, transport_util_js_1.fetchAtlassian)(credentials, path); methodLogger.debug(`Search complete, found ${searchData.values?.length || 0} matches`); // Extract pagination information const pagination = (0, pagination_util_js_1.extractPaginationInfo)(searchData, pagination_util_js_1.PaginationType.PAGE); // Format the search results const formattedRepos = (0, atlassian_repositories_formatter_js_1.formatRepositoriesList)(searchData); let finalContent = `# Repository Search Results\n\n${formattedRepos}`; // 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 (searchError) { methodLogger.error('Error performing repository search:', searchError); throw searchError; } }