@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
JavaScript
;
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;
}
}